Программирование >>  Многопоточная библиотека с принципом минимализма 

1 ... 71 72 73 [ 74 ] 75 76 77 ... 106


в классе Factory реализуются следующие примитивы.

bool RegisterCconst identifierType*, Productcreator creator);

Эта функция регистрирует производитель изделия вместе с идентификатором типа. Если регистрация прошла успешно, она возвращает значение true, в противном случае возвращается значение f al se (если производитель изделия с тем же идентификатором типа уже зарегистрирован ранее).

bool ungeristeredCconst IdentifierType* id);

Эта функция аннулирует регистрацию идентификатора заданного типа. Если этот идентификатор был зарегистрирован ранее, функция возвращает значение true.

AbstractProduct* CreateObjectCconst IdentifierType* id);

Эта функция выполняет поиск идентификатора типа во внутреннем ассоциативном массиве. Если идентификатор найден, она вызывает соответствующий производитель объектов данного типа и возвращает результат его работы. Если идентификатор не найден, возвращается результат работы функции FactoгуЕг-rorPolicy<ldentifierType, AbstractProduct>::OnunknownType. По умолчанию реализация класса FactoryErrorpolicy генерирует исключительную ситуацию вложенного типа Exception.

8.11. Краткий обзор шаблонного класса CloneFactory

Объявление класса CloneFactory имеет следующий вид.

template <

class AbstractProduct, class Productcreator =

AbstractProduct* C*)Cconst AbstractProduct*), tempiate<typename, class>

class FactoryErrorpolicy = DefaultFactoryError

>

class CloneFactory;

Класс AbstractProduct является базовым классом иерархии, для которой создается фабрика клонирования.

Класс Productcreator представляет собой вызываемую сущность, создающую дубликат объекта, передаваемого как параметр, и возвращающую указатель на клон.

В классе CloneFactory реализуются следующие примитивы.

bool RegisterCconst Typelnfo*, Productcreator creator);

Эта функция регистрирует производитель изделия вместе с типом Typelnfo (что позволяет неявно вызывать конструктор копирования класса std: :type info). Если регистрация прошла успешно, она возвращает значение true, в противном случае возвращается значение false.

bool UngeristeredCconst Typelnfo* typeinfo);

Эта функция аннулирует регистрацию производителя объектов заданного типа. Если этот тип был зарегистрирован ранее, функция возвращает значение true.

AbstractProduct* CreateObjectCconst AbstractProduct* model); 236 Часть II. Компоненты



Эта функция выполняет поиск динамического типа объекта model во внутреннем ассоциативном массиве. Обнаружив тип, она вызывает соответствующий производитель объектов данного типа и возвращает результат его работы. Если тип не найден, возвращается результат работы функции FactoryErrorPol-icy<OrderedTypeinfo, AbstractProduct>::OnunknownType.



Шаблон Abstract Factory

в этой главе обсуждается обобщенная реализация щаблона проектирования Abstract Factory (Gamma et al., 1995). Абстрактная фабрика - это интерфейс для создания семейства связанных или взаимозависимых объектов.

Абстрактные фабрики могут бытъ важными архитектурными компонентами, поскольку они гарантируют, что в системе создаются правильные конкретные объекты. Если вы не хотите, чтобы кнопка FunkyButton появлялась в диалоговом окне Conven-tionalDialog, используйте щаблон проектирования Abstract Factory, гарантирующий, что эта кнопка появляется только в окне FunkyDialog. Для этого нужно проконтролировать лищь небольшую часть кода, а остальная часть приложения будет работать с абстрактными типами Dialog и Button.

В главе рассматриваются следующие вопросы.

Область применения шаблона проектирования Abstract Factory.

Определение и реализация компонентов шаблона Abstract Factory.

Использование обобщенных функциональных возможностей шаблона Abstract Factory, предоставленных библиотекой Loki, и их расширение.

9.1. Архитектурная роль шаблона Abstract Factory

Представьте себе, что вы разрабатываете компьютерную ифу найти и уничтожить наподобие Doom или Quake.

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

Более крутых игроков вы соблазняете уровнем повышенной сложности. На этом уровне вражеские солдаты совершают три выстрела в секунду и владеют приемами карате, монстры коварны и вероломны, а супермонстры встречаются постоянно.

Возможная модель этого ужасного мира, населенного врагами и монстрами, может содержать базовый класс Enemy и производные от него интерфейсы Soldier, Monster и SuperMonster. Затем на основе этих интерфейсов для реализации легкого уровня ифы создаются производные классы sillySoldier, sillyMonster и SillySuperMon-ster. В заключение для уровня повышенной сложности реализуются классы BadSol-dier, BadMonster и BadSuperMonster. В результате возникает иерархия классов, представленная на рис. 9.1.



1 ... 71 72 73 [ 74 ] 75 76 77 ... 106

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика