澄清工厂设计模式的uml类图

时间:2018-12-22 11:02:20

标签: design-patterns uml factory-pattern

我正在学习工厂方法设计模式,并在教程中找到以下类图。我了解product和concreteProduct部分,但Creator和ConcreteCreator部分对我来说有点模糊。如果有人澄清了UML图,我将不胜感激。谢谢。 enter image description here

2 个答案:

答案 0 :(得分:3)

关于继承。图说:

a)我们有一个抽象类型Product及其具体实现ConcreteProduct,这意味着ConcreteProduct继承自Product

b)然后,我们有一个抽象类Creator指定一个工厂方法,另一个抽象方法'AnOperation()'作为每个继承者都必须实现的协定。 ConcreteCreator继承自Creator,并在合同指定的成员中实现。

c)此外,ConcreteCreator对类型ConcreteProduct的依赖性,因为它实例化并返回了该类型。依赖关系由虚线箭头表示。

由于ProductCreator的字母是斜体,因此您知道它们是抽象类型。您不能创建抽象类型的实例,因为它们不提供功能,而仅提供其成员的声明。继承者必须通过赋予其功能来实现此成员。与抽象类型相反,继承者,如果不是抽象本身,则可以实例化,因此称为具体类型。

抽象类型是所有继承者的契约或承诺。 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'

答案 1 :(得分:0)

没有English设计模式(在GoF的书中)。您所包含的图表接近if locale == "en" { //show the button and update with the outgoing link } else { //hide the button } Factory是名称的重要组成部分,不能省略。

您包含的图看起来像是GoF的书中的类图的复制品。不幸的是,您的复制错过了一些关键点。下面是GoF的书中的图表。 the class diagram of Factory Method pattern

Factory Method模式是Method的特例(或至少如上面的类图^所示)。

如果将其放在序列图中,我通常会更容易理解:

sequence diagram of Factory Method pattern

^ Factory Method不必在Template Method中使用。 Factory Method是使用Template Method的另一个示例。