工厂方法《漫谈设计模式》阅读笔记

工厂方法

 

工厂方法模式经常用于以下情景:

1.客户类不关心使用哪个具体类,只关心该接口所提供的功能。

2.创建过程比较复杂,例如需要初始化其它关联的资源类,读取配置文件等等。

3.接口有很多具体实现或者抽象类有很多具体子类时,你可能需要为客户代码写一大串if-else逻辑来决定运行时使用哪个具体实现或者具体子类。

4.不希望给客户程序暴露过多此类的内部结构,隐藏这些细节可以降低耦合度。

5.优化性能,比如缓存大对象或者初始化比较耗时的对象。

 

工厂方法模式定义:为创建对象定义一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟至子类。

 

工厂方法模式是对实例化过程进行封装而形成的,客户对象无需关心实例化这些类的细节,把它们交给工厂类。该模式比较简单,我们从UML静态类图着手。

 

代码实现:

Public interface Factory{

Product createProduct();

}

 

Public class ConcreteFactory implements Factory{

@Override

Public Product createProduct(){

Return new ConcreteProduct();

}

}

 

Public interface Product{

 

}

 

Public class ConcreteProduct implements Product{

 

}

 

如果具体实现类较多,我们可以定义一个参数化的工厂方法,根据不同的输入返回不同的实现子类,代码片段如下:

Public Product createProduct(String type){

If("type1".equals(type)){

Return a type1 instance...

}else if("type2".equals(type)){

Return a type2 instance...

}else{

...

}

}

客户对象可以根据需要传入不同的参数获得不同类型的对象。

posted @ 2012-01-21 17:51  rason2008  阅读(176)  评论(0编辑  收藏  举报