设为首页 - 加入收藏 焦点技术网
热搜:java
当前位置:首页 >

设计模式之工厂方法模式

2013-01-27 21:31:00.0 设计模式  
导读:含义工厂方法模式:(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。结构图:与简单工厂模式对比简单运算器结构图对比 简单工厂: 工厂方法:  根据上图结构图的例子,如果要增加一个新的算法,简单工厂模式就必须要在运算工厂类的方法里加分支条件,修改原有的类,违背了开放封闭原则。而工厂方法模式,只需扩展(即增加,不用修改原先的类...。。。

含义

工厂方法模式:(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。


结构图:


与简单工厂模式对比

简单运算器结构图对比

 

简单工厂:

 

工厂方法:

 

 

根据上图结构图的例子,如果要增加一个新的算法,简单工厂模式就必须要在运算工厂类的方法里加分支条件,修改原有的类,违背了开放封闭原则。而工厂方法模式,只需扩展(即增加,不用修改原先的类)原有的算法类和工厂类。

简单工厂优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说去除了与具体产品的依赖。

工厂方法是简单工厂模式的进一步抽象和推广克服了简单工厂违背开放封闭原则的缺点,又保持了封装对象创建过程的优点。(使得增加新产品时,不需要去更改原有的产品体系和工厂类,只需扩展新的类即可)

二者都集中封装了对象的创建,使得要更换对象时,不需要做大的改动就可实现,降低了客户程序与产品对象的耦合。

 

何时用工厂方法模式

1、一个类无法预测它要创建的对象属于哪个类

2、 一个类用它的子类来指定所创建的对象

3、把要创建哪一个类的信息局部化的时候

 

实现工厂方法模式,注意的几个问题

1、基类是一个抽象类,模式必须返回一个完整的可工作的类

2、基类包含默认方法,除非默认方法不能胜任,才会调用这些方法

3、可以将参数传递给工厂,告诉工厂返回哪一个类型的类。这种情况下,类可以共享相同的方法名,但完成的工作可以不同。


(编辑: wang379275614)

网友评论