2013-04-11 3 views
3

Как я понял завод шаблон проектирования используется для создания объекта вместо конструкторовПравильно ли это использование метода фабрики

в предыдущем вопросе я объяснил свою ситуацию, которая:
я сложная сеть представлена ​​в виде гиперграфа Вершины гиперграфа от разных типов: image, tag ....
Я должен создать тысячи вершин будет сложно создать его вручную! так я думал, что завод рисунок может помочь мне в этом случае

я нарисовал два возможных схемы, используя yUML, но я не могу решить, что является наиболее подходящим для моей ситуации

first diagram

second diagram

+0

Nice images. Однако трудно сказать, не глядя на какой-то код.(На самом деле я должен признать, что я не совсем понимаю, как вы его реализуете во втором случае, но диаграмма кажется более простой.) – Axel

+0

Я не понимаю вторую диаграмму. Как вы предлагаете возвращать TagVertex и ImageVertex из того же метода 'createVertex()', который не принимает аргументов? –

+0

@Axel Я думаю, что я найду другие проблемы, когда начну писать код :) – nawara

ответ

2

На самом деле оба изображают шаблон Factory Method.

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

Просто, в первом изображении, как и у вас есть еще небольшая схема, то лучше поставить пунктирную линию от AbstractVertexFactory до Vertex, так как есть dependency relationship между этими классами.

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

Объяснения того, почему первый лучше второго:

  • Менее сочетание: В первом случае, если изменить/удалить TagVertex, нет клиентов ImageFactory (и potetially других заводы).
  • Более растяжимый и Прост в обслуживании: Тот же принцип. Если вы измените класс продукта (Vertex в своем сценарии), на него не повлияет клиент другой фабрики. Также вы можете свободно добавлять фабрики без необходимости изменения существующего кода.
+0

Было бы хорошо, если бы вы объяснили, почему 1-е изображение лучше второго. –

+0

Сделал это. Это хорошо? Будьте честны, если не достаточно хороши, я могу подробнее рассказать. – acdcjunior

+0

Эта модель основана на официальной диаграмме UML Factory Method UML нет точечной линии между AbstractProduct, которая является вершиной в моем случае, и AbstractFactory – nawara

2

Диаграмма 1 - это правильный вариант.

Аннотация фабрика используется для создания семейств связанных или зависимых объектов. В этом случае абстрактная фабрика veretx (посредством использования конкретных классов фабрики Tag или Image) создаст конкретные продукты (вершина вершин и вершин изображений) соответственно.

В случае второй диаграммы нет никакой связи между продуктами и абстрактной фабрикой. Аннотация фабрика должна создавать бетонные изделия (используя конкретные заводские классы Image Vertex и Tag Vertex в этом случае)

Смежные вопросы