Multitone pattern
Всички знаете 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-документа с различни параметри (напр. времето за валидност на една част от страницата да е различно от останалите).












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