Design Pattern: Factory Method 模式
2011-01-06 16:03
316 查看
http://www.35java.com/zhibo/forum.php?mod=viewthread&tid=265&extra=page%3D2
考虑一个状况,您所经营的工厂正在生产一个新的电视机产品,现在有一个问题发生了,您的电视机产品所有的组件都可以自行生产,像是操作面版、电源、摇控装置等等等,但荧幕却必须依赖另一个厂商或子厂商供应,这时您怎么办? 您不能将生产进度停下了,相反的您必须确定一些事情,您知道有关于荧幕控制的所有介面,您可以将这些对介面的操作沟通先实现,等到荧幕到了,直接将荧幕与您的半成品组合起来,一个完整的成品即可出厂。 FactoryMethod模式在一个抽象类中留下某个创建元件的抽象方法没有实作,其它与元件操作相关联的方法都先依赖于元件所定义的介面,而不是依赖于元件的实现,当您的成品中有一个或多个元件无法确定时,您先确定与这些元件的操作介面,然后用元件的抽象操作介面先完成其它的工作,元件的实作(实现)则推迟至实现元件介面的子类完成,一旦元件加入,即可完成您的成品。 再举一个例子,假设您要完成一个文件编辑器,您希望这个编辑器可以适用于所有类型的档案编辑,例如RTF、DOC、TXT等等,尽管这些文件有着不同的格式,您先确定的是这些文件必然具备的一些操作介面,例如储存、开启、关闭等等,您用一个IDocument类型来进行操作,这么一来这个框架就无需考虑实际的储存、开启等细节是如何进行的。 以 UML 类别图来表现以下的概念: AbstractEditor中的createDocument()方法是个抽象方法,因为框架不知道您将实现一个什么类型的文件,这个抽象方法将推迟至继承AbstractEditor的子类中实现。 这个架构可用以下简单的示意程式来作示范,当中实现了一个RTFDocument,虽然在AbstractEditor中并不知道我们会套用这个RTFDocument,但您可以看到,透过多型操作,您的框架可以进行对文件的相关操作。 AbstractEditor.java public abstract class AbstractEditor { private IDocument document; public abstract IDocument createDocument(); public void newDocument() { document = createDocument(); document.open(); } public void saveDocument() { if(document != null) document.save(); } public void closeDocument() { if(document != null) document.close(); } } IDocument.java public interface IDocument { public void open(); public void save(); public void close(); } RTFEditor.java public class RTFEditor extends AbstractEditor { public IDocument createDocument() { return new RTFDocument(); } } RTFDocument.java public class RTFDocument implements IDocument { public RTFDocument() { System.out.println("建立RTF文件"); } public void open() { System.out.println("开启文件"); } public void save() { System.out.println("储存文件"); } public void close() { System.out.println("关闭文件"); } } 将Factory Method的结构绘出如下: FactoryMethod中的AbstractOperator中拥有一个抽象的factoryMethod()方法,它负责生成一个IProduct类型的物件,由于目前还不知道将如何实现这个类型,所以将之推迟至子类别中实现,在AbstractOperator中先实现IProduct操作介面沟通的部份,只要介面统一了,利用多型操作即可完成各种不同的IProduct类型之物件操作。 也就是说,对AbstractOperator来说,其操作的IProduct是可以抽换的。 |
相关文章推荐
- Design Pattern: Factory Method 模式
- Design Pattern_Factory Method(工厂模式)
- Design Pattern: Factory Method 模式
- Design Pattern: Factory Method 模式
- 设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 工厂模式(FactoryMethod) - Java实现
- Design Pattern: Factory Method 模式
- java23种常用设计模式之工厂方法模式(Factory Method)2
- 设计模式:工厂方法模式(Factory Method)
- 设计模式 工厂方法(Factory Method Pattern)
- 创建型模式(一):FactoryMethod ( 工厂方法 )
- 设计模式之Factory method
- 设计模式-工厂方法模式(Factory Method)
- 工厂方法(Factory Method)模式
- C#设计模式之Factory Method
- 代码设计模式之工厂方法模式(Factory Method)
- Java23种设计模式案例:工厂方法模式(Factory Method)
- 设计模式之工厂方法(Factory Method)
- 我的实用设计模式之Simple Factory,Factory Method和Abstract Factory
- 设计模式 - Factory Method
- [设计模式-创建型]工厂方法(Factory Method)