Какой шаблон проектирования использовал Twig для реализации загрузчиков?

Я изучаю шаблоны проектирования и, в частности, шаблоны Factory и Abstract Factory. Я изучал Twig Фабьена Потенсье и адаптировал то, как он писал код для класса Twig_Loader_Filesystem, для другой моей ситуации.

Вот как он начал занятия:

class Twig_Loader_Filesystem
    implements Twig_LoaderInterface, Twig_ExistsLoaderInterface

Мне интересно, считается ли способ, которым Фабьен сделал это для Twig_Loader_Filesystem, абстрактным заводским шаблоном или просто простым абстрактным шаблоном проектирования? Потому что я могу сказать, что использование интерфейса предполагает абстрактность, но я думаю, что это не фабричный класс.

Возможно, он использовал фабричный метод в другом месте? Какой шаблон проектирования используется здесь?


person Kim Stacks    schedule 17.03.2013    source источник


Ответы (1)


В фактической реализации могут быть задействованы другие шаблоны (также Factory), но то, о чем вы здесь пишете, - это шаблон Strategy.

http://en.wikipedia.org/wiki/Strategy_pattern

http://sourcemaking.com/design_patterns/strategy

Паттерн стратегии является примером базовой абстракции, в которой взаимозаменяемые классы реализуют общий интерфейс и инкапсулируют различные алгоритмы, при этом клиентскому классу не нужно заботиться о них или знать о них.

person gphilip    schedule 21.03.2013
comment
Спасибо за ваш ответ. Вы случайно не видели какую-либо фабрику или абстрактную фабрику, используемую в компонентах Twig или Symfony? - person Kim Stacks; 22.03.2013
comment
Для начала вы можете найти код с надписью Factory: github.com/ Не все они фабрики, но здесь есть фабрики, например: Symfony/Component/Security/Core/Encoder/EncoderFactory.php - person gphilip; 25.03.2013