Шаблоны проектированияШаблоны - это способ описания оптимальных методов и хороших дизайнов проектирования. Они предоставляют универсальные пути решения общих проблем программирования. Фабрика (Factory)Шаблон Фабрика позволяет создавать объекты во время работы программы. Этот шаблон называется Фабрикой потому, что он отвечает за производство объекта. Параметризированная фабрика принимает в качестве аргумента имя класса, объект которого создается. Пример #1 Параметризированный фабричный метод
<?phpОпределение этого метода в классе позволяет драйверам быть загруженными "на лету". В случае, если класс Example был бы классом абстрактного доступа к базе данных, то загрузка драйвера MySQL и SQLite может быть выполнена следующим образом:
<?phpСинглтон (Singleton)Шаблон проектирования Синглтон применяется в тех ситуациях, когда нужно получить единственный экземпляр класса. Синглтон является одним из четырех("Gang of Four") основных создающих шаблонов. Синглтон обычно применяется в классах для баз данных, логирования, контроллеров(Front Controller) и объектах, определяющих запросы и ответы(Request и Response). Пример #2 Пример Синглтона
<?phpПример ниже иллюстрирует использование Синглтона
<?phpВнимание
Паттерн Синглтон является одним из наиболее противоречивых паттернов. Критики утверждают, что Синглтоны вводят глобальные состояния при их применении и тесно связывают Синглтон и использующие его классы. Это приводит к скрытой зависимости и неожиданным побочным эффектам, что в свою очередь приводит к коду, который сложнее тестировать и поддерживать. Критики также утверждаю, что не имеет смысла использовать Синглтон в архитектурах "ничего общего" (Shared Nothing Architecture), таких как PHP, где объекты являются уникальными в пределах запроса и никак иначе. Проще и аккуратнее создавать структуры взаимосвязанных объектов с помощью шаблонов Строителей(Builders) и Фабрики(Factory) за один раз в начале запроса. Синглтоны также нарушают некоторые из "Жестких" принципов ООП проектирования и Закон Деметры. Синглтоны нельзя сериализовывать. Они не могут быть подклассами (до PHP 5.3) и не будут собираться сборщиком мусора из-за того, что экземпляр хранится в статическом атрибуте Синглтона. |
||