王海挺学设计模式-工厂方法模式

来源:互联网 发布:淘宝官方话费充值平台 编辑:程序博客网 时间:2024/05/18 00:28

好了,已经一个星期没有写设计模式了,下面,我来学习工厂方法模式:

以前,我们学习过简单工厂模式,大家可以看看,我新浪中的博客:blog.sina.com.cn/0577it.

回顾一下,简单工厂模式:

客户程序,调用Factory,根据message来创建各种具体的类,再根据里氏原理,付值给AbstractProduct.由AbstractProduct调用方法实现.

 

我们先让简单工厂模式 vs.工厂方法:

1 、在简单工厂模式中,要增加一个功能类是这样做的:增加功能类;改工厂方法(是指那个有case语句的地方)。简单工厂模式的优点就是工厂类中包含了必要的逻辑判断,根据客户端的选择动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

2、现在用工厂方法,就可以没有问题了,不需要改动。

 

工厂方法模式的定义:

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

他的uml

 

工厂方法模式UML图

我们说,简单工厂模式的这个工厂类与分支耦合,那么我们就对它下手,根据依赖倒转原则,我们把工厂类抽象出一个接口,这个接口的方法,就是创建抽象产品的工厂方法。然后,所有的要生产具体类的工厂,就去实现这个类,于是增加功能类后,就不需要去更改原来的工厂类了,但是需要重载新的工厂类。

这样整个工厂和产品体系没有修改的变化,而只有扩展的变化,这就完全符合了开放-封闭原则的精神。

其实,他的本质是:客户端需要决定实例化哪个工厂来实现功能类,选择判断依然存在。不过这个问题其实可以用反射的方法解决,见

blog.sina.com.cn/0577it.