我正在学习工厂方法设计模式,并在教程中找到以下类图。我了解product和concreteProduct部分,但Creator和ConcreteCreator部分对我来说有点模糊。如果有人澄清了UML图,我将不胜感激。谢谢。
答案 0 :(得分:3)
关于继承。图说:
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'
答案 1 :(得分:0)
没有English
设计模式(在GoF的书中)。您所包含的图表接近if locale == "en" {
//show the button and update with the outgoing link
} else {
//hide the button
}
。 Factory
是名称的重要组成部分,不能省略。
您包含的图看起来像是GoF的书中的类图的复制品。不幸的是,您的复制错过了一些关键点。下面是GoF的书中的图表。
Factory Method
模式是Method
的特例(或至少如上面的类图^所示)。
如果将其放在序列图中,我通常会更容易理解:
^ Factory Method
不必在Template Method
中使用。 Factory Method
是使用Template Method
的另一个示例。