Уточняющая диаграмма классов uml фабричного шаблона проектирования - PullRequest
0 голосов
/ 22 декабря 2018

Я изучал шаблон проектирования метода фабрики и нашел следующую диаграмму классов в учебнике.Я понимаю продукт и конкретную часть продукта, но часть Creator и ConcreteCreator для меня немного расплывчата.Я ценю, если кто-то проясняет диаграмму UML.Благодарю.enter image description here

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Нет шаблона Factory Design (в книге GoF).Диаграмма, которую вы включили, близка к Factory Method.Method является важной частью имени и не может быть опущено.

Диаграмма, которую вы включили, выглядит как репродукция диаграммы классов из книги GoF.К сожалению, ваши репродукции упустили некоторые критические моменты.Ниже приведена схема из книги GoF.Шаблон the class diagram of Factory Method pattern

Factory Method является частным случаем Template Method (или, по крайней мере, как показано на приведенной выше диаграмме классов ^).

Мне часто легче понять, если мы поместим это в диаграмму последовательности:

sequence diagram of Factory Method pattern

^ Factory Method не имеетдля использования в Template Method.Abstract Factory является еще одним примером использования Factory Method.

0 голосов
/ 22 декабря 2018

Речь идет о наследовании.Диаграмма говорит:

a) У нас есть абстрактный тип Product и его конкретная реализация ConcreteProduct, что означает, что ConcreteProduct наследуется от Product.

b) Тогда у нас естьабстрактный класс Creator, который определяет фабричный метод и другой метод AnOperation () в качестве контракта, который должен реализовать каждый наследник.ConcreteCreator наследуется от Creator и реализует в контракте указанных членов.

c) Более того, ConcreteCreator зависит от типа ConcreteProduct, поскольку он создает и возвращает этот тип.Зависимость обозначена пунктирной стрелкой.

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

Абстрактные типы - это контракт или обещание, которое все наследники, например Creator, должныреализован фабричный метод FactoryMethod ().

Обычно вы используете его так:

Creator creator = new ConcreteCreator();

// Because 'Creator' specifies the contract 
// we know we can invoke a method called 'FactoryMethod' that will return
// an instance of type 'Product'
Product product = creator.FactoryMethod();
// The factory method returns a 'ConcreteProduct' to satisfy the contract defined by the abstract 'Creator' type. 
// It is assignable to 'Product' because 'ConcreteProduct' inherits 'Product'
...