Шаблоны проектирования. Abstract Factory.

В предыдущей статье я описал шаблон под названием Factory Method. Логически обосновано описание далее шаблона Abstract Factory. Он во многом является дальнейшим развитием Factory Method.

Вспомним структуру нашей системы и усложним ее. У нас была задача установлении документооборота между двумя пунктами. Документы были двух видов: PDF и XML.  Пусть теперь перед нами поставили условие о том, что документы бывают различными по содержанию. Например, пусть это будут бухгалтерские отчеты и организационные указания. Причем эти два вида можно передавать как в виде XML, так и в виде PDF. Таким образом можно определить абстрактные классы HandManager, BuhDoc, OrgDoc. Получится такая структура:

 

Таким образом, управляющий класс XMLHandManager заведует управлением документами в формате XML, а значит классами XMLBuhDoc и XMLOrgDoc. Аналогичную ситуацию имеем с форматом PDF.

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

Но нельзя не отметить и минус. Если мы захотим внести новый вид документа, например, приказы об увольнении, то это повлечет создание еще одной структуры, плюс необходимо будет изменить и класс-управленец. К примеру была такая структура:

 

Тогда при добавлении нового вида документа потребуется пересмотр структуры XMLHandManager:

 

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

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

1 комментарий Шаблоны проектирования. Abstract Factory.

  1. Пингбэк: Шаблоны проектирования. Prototype. |  I-paper.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">