谈了简单工厂模式,下面继续谈谈工厂方法模式。前一节的最末点明了简单工厂模式最大的缺点——不完全满足OCP。为了解决这一缺点,设计师们提出了工厂方法模式。工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。下面我们通过修改上一节的实例来介绍工厂方法模式。

我们在不改变产品类(“足球运动员”类和“篮球运动员”类)的情况下,修改下工厂类的结构,如下图所示:
[center]
[/center]
相关代码如下:
Java代码
运动员.java public intece 运动员 { public void 跑(); public void 跳(); }足球运动员.java public class 足球运动员 implements 运动员 { public void 跑(){//跑啊跑 } public void 跳(){ //跳啊跳 } } 篮球运动员.java public class 篮球运动员implements 运动员 { public void 跑(){ //do nothing } public void 跳(){//do nothing } } 体育协会.java public intece 体育协会 { public 运动员 注册();} 足球协会.java public class 足球协会 implements 体育协会 { public 运动员 注册(){return new 足球运动员(); } } 篮球协会.java public class 篮球协会 implements 体育协会{ public 运动员 注册(){ return new 篮球运动员(); } } .java public class { private 运动员 守门员; private 运动员 后卫; private 运动员 前锋; public voidtest() { 体育协会 中国足协 = new 足球协会(); this.前锋 = 中国足协.注册(); this.后卫 =中国足协.注册(); 守门员.跑(); 后卫.跳(); } }
复制代码很明显可以看到,“体育协会”工厂类变成了“体育协会”接口,而实现此接口的分别是“足球协会”“篮球协会”等等具体的工厂类。
这样做有什么好处呢?很明显,这样做就完全OCP了。如果需要再加入(或扩展)产品类(比如加多个“乒乓球运动员”)的话就不再需要修改工厂类了,而只需相应的再添加一个实现了工厂接口(“体育协会”接口)的具体工厂类。
简单工厂模式与工厂方法模式大PK
从以上对两种模式的介绍可以了解到,工厂方法模式是为了克服简单工厂模式的缺点(主要是为了满足OCP)而设计出来的。但是,工厂方法模式就一定比简单工厂模式好呢?笔者的答案是不一定。工厂方法模式下面笔者将详细比较两种模式。
1. 结构复杂度
从这个角度比较,显然简单工厂模式要占优。简单工厂模式只需一个工厂类,而工厂方法模式的工厂类随着产品类个数增加而增加,这无疑会使类的个数越来越多,从而增加了结构的复杂程度。

2.代码复杂度
代码复杂度和结构复杂度是一对矛盾,既然简单工厂模式在结构方面相对简洁,那么它在代码方面肯定是比工厂方法模式复杂的了。简单工厂模式的工厂类随着产品类的增加需要增加很多方法(或代码),而工厂方法模式每个具体工厂类只完成单一任务,代码简洁。
3.客户端编程难度
工厂方法模式虽然在工厂类结构中引入了接口从而满足了OCP,但是在客户端编码中需要对工厂类进行实例化。而简单工厂模式的工厂类是个静态类,在客户端无需实例化,这无疑是个吸引人的优点。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27239-2.html
查出来告他诈骗
和美海军这样的对手玩比和毛子玩会有意义
任何一个门槛低的行业