[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Паттерн Abstract Factory
TMake
Название и классификация паттерна:
Абстрактная фабрика - паттерн, порождающий объекты.

Назначение:
Предостовляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.

Применимость:
Используйте паттерн Абстрактная фабрика, когда:
  • система не должна зависеть от того, как создаются, компонуются и представляются входящие в нее объекты;
  • входящие в семейство взаимосвязанные объекты должны использоваться вместе и вам необходимо обеспечить выполнение этого ограничения;
  • система должна конфигурироваться одним из семейств составляющих ее объектов;
  • вы хотите предоставить библиотеку объектов, раскрывая только их интерфесы, но не реализацию;
Паттерн Абстрактная фабрика позволяет гарантировать то, что все порожденные объекты будут соответствовать определенному семейству, за счет введения ограничений в абстрактном классе. Разработчику предоставляется возможность контролировать классы объектов созданные приложением, через абстрактный интерфейс, а имена создаваемых объектов известны только конкретной фабрики и в коде клиента они не упоминаются. За счет того что паттерн Абстрактная фабрика должен появляться всего один раз - при инстанцировании (прямое или динамическое создание экземпляра класса), приложение становится централизованным и это облегчает замену используемой конкретной фабрики.

Пример:
В абстрактной классе определяется интерфейс для генерации новых классов, но сама генерация производится в классе создателя.

<?php 

/** Наша абстрактная фабрика */
abstract class myFactory
{
/** точка входа в фабрику */
static public function getFactory(){
if(Base :: route['get']['mod'] == 'news')
return new newsFactory();
else
return
new blogFactory();
}
/** предполагаем что у дочерних классов должны быть методы */
abstract function createMes();
abstract function getError();
}

/** класс новостей */
class newsFactory extends myFactory
{
public function createMes(){
return newsclass :: createMes();
}
public function getError(){
return Base :: getError();
}
}


/** класс блога */
class blogFactory extends myFactory
{
public function createMes(){
return blogclass :: createMes();
}
public function getError(){
return Base :: getError();
}
}


/** запускаем нашу абстрактную фабрику */
$factory = myFactory :: getFactory();

/** создаем новое сообщение */
$factory -> createMes();

/** смотрим ошибки */
$factory -> getError();
?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.