Multitone pattern

Публикувано на: декември 23rd, 2008 от Mad Master в Статии

Всички знаете singletone модела за организация на обектите. Имате си един статичен метод, който създава също в статична променлива инстанцията на обекта и последващите извиквания само ви връщат този обект.

< ?php
class singletone
{
   static $instance;
  public static function getInstance()
  {
    if(!self::$instance instanceof singletone)
    {
       self::$instance = new singletone();
    }
    return self::$instance;
}
?>

От тук нататък като ви потрябва singletone обекта, просто викате singletone::getInstance()->doSomething(). Това е много полезен механизъм, защото на практика имате достъп до този обект от всякъде.

Проблемът обаче е, ако се наложи да ползвате няколко обекта инстанции на един и същ клас. Това по горният метод чрез singletonе-а няма да стане. Решението е една проста модификация на класа - multitone pattern. На getInstance  обекта се подава един параметър, който да обозначава името на обекта, който искате  да имате. А вътре в самият метод, статичната променлива се ползва като масив, за да запази инстанциите на всички обекти според имената им.

< ?php
class multitone
{
   static $instance;
  public static function getInstance($objectName)
  {
    if(!self::$instance[$objectName] instanceof multitone)
    {
       self::$instance[$objectName] = new multitone();
    }
    return self::$instance[$objectName];
}
?>

Така можете да си викате getInstance с различни параметри, като получавате достъп до различните обекти от този клас.

 Примерна ситуация, в която може да ви се наложи да ползвате описаното по-горе е, когато реализрате кеш система, която да записва определено съдържание във файлове. Възможно е да се наложи да ползвате кеша за различни части от php-документа с различни параметри (напр. времето за валидност на една част от страницата да е различно от останалите).

Споделете с приятели:
  • Svejo.net
  • Facebook
  • Digg
  • Technorati
  • del.icio.us
  • Google
  • Dao.bg
  • Dobavi.com
  • MySpace
  • Ping.bg
  • Pipe.bg
  • Web-BG

2 отговора на 'Multitone pattern'

  1. [...] до акъла, но не знам защо едва сега се сещат за нея. http://www.php-bg.org/read/multitone-pattern в Любими преди 1 минута edno23.com Начало контакти [...]

  2. sickboy казва:

    Хм, този патерн го ползвам от доста време, само че в perl. Не знаех, че официялно си има име. Много прилича на Registry, който сам по себе си е Singleton.

Остави отговор




XHTML::
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">