| //抽象产品,可以是接口或者抽象类 public abstract class document { public void open(){ ............... ............... } public void close(){ ............... ............... } public void save(); } //具体的产品, public class Mydocument extends document{ public void open(){ ............. .............. } ............... } //模板方法,在方法中使用了工厂方法 |
具体的工厂实现由子类来实现工厂方法:
| public class myappliaction extends appliaction { public document createDocument(){ return new Mydocument(); } } |
大家可以看出,这其实使用template method模式,抽象方法声明创建对象,而模板方法完成业务逻辑,她使用抽象创建方法,由继承来获得产品,而不是使用对象来创建对象的。
并且大家仔细看<设计模式>71页的结构图,里的creator里有两个方法,其中一个使用factorymethod方法,另外一个就是普通的方法,anOperation它调用了工厂方法,product=factorymethod()来获得产品对象。
现在问题就出现在这里,而另外一本书阎宏的《java与模式》的167地结构图中却没有把这点作出标记,并且提供的示例,也不像最初<设计模式>中的工厂方法的例子,
他的示例如下:
|
//抽象工厂,而这里却没有方法使用工厂方法: public class ConcreteCreator1 implements Creator 而客户端却使用; |
我感觉这样示例有问题,或者不妥,或者不能表达原意。
在客户端,他的对象创建使用了
prod1 = creator1.factory();
这样显然使用对象creator1来创建对象的,而不是使用继承,类模式来完成创建的。这与工厂方法的原意,类模式,把创建工厂延迟到子类实现,等有冲突。
这样想对象创建模式。