工厂方法模式

  前面我们学习过简单工厂模式,它简化了对象的创建,使得客户端调用时传入标志量,那么调用工厂就可以生产出相应的对象。那么工厂方法模式和简单工厂模式有什么区别呢?

  我们还是拿前面运算类来举例子,我们先看简单工厂模式下的实现。

  

  这个我们很熟悉了,创建一个抽象的运算类,提供公用的属性和方法以供继承,然后加减乘除四个子类继承自运算类。创建一个简单工厂类,根据客户端的标志量来生产出相应的运算类。

  然后我们来看工厂方法的实现。

  

  直观来看,工厂方法模式想比较简单工厂模式,它对工厂类又进行了抽象,简单工厂是用工厂去生产实例,而工厂方法则先构造相应的工厂,然后用工厂生产实例。

  这其实就是简单工厂和工厂方法的区别所在,简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件去实例化相应的类,对于客户端来说去除了与具体产品的依赖。但是如果我们要新增一个方法呢?我们需要首先添加功能方法,然后修改工厂,添加case分支。这就违背了开闭原则,不但对拓展开放了,对修改也开放了,这时候我们就要用到工厂方法模式了。

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

  

  那么,我们在新增方法时,只需要增加功能类,然后增加相应的工厂类并实现工厂接口就可以了。

  但是这样一来,选择的职责就换到了客户端。

posted @ 2012-10-24 12:19  寒剑飘香  阅读(166)  评论(0编辑  收藏  举报