工厂方法模式
简单工厂有一个缺点:违背了开闭原则,可以使用工厂方法模式来解决,但是类的数目是明显的增加了。
1.工厂方法模式:使用工厂限定方法,每一种需要创建对象都需要创建一个工厂,并且需要实现此工厂方法,在工厂中创建出对象。
2.代码实现:
案例说明,需要创建两种车的市里,我们首先创建车的类,具体车的类实现车这个接口类。
package kw.test.gcXXX; public interface Car { public void run(); }
具体车的类
package kw.test.gcXXX; public class BenBen implements Car{ @Override public void run() { // TODO Auto-generated method stub System.out.println("XCXXX"); } }
package kw.test.gcXXX; public class HongQi implements Car{ @Override public void run() { // TODO Auto-generated method stub System.out.println("XXXXXXXXXXX"); } }
两个车类也创建好了,现在我们创建车的工厂,只是提供创建车的方法,并没有具体实现。
package kw.test.gcXXX; public interface Factory { public Car AllCar(); }
具体实现的车工厂,不同的工厂创建出自己具体的车
package kw.test.gcXXX; public class HongQiFactory implements Factory{ @Override public Car AllCar() { // TODO Auto-generated method stub return new HongQi(); } }
package kw.test.gcXXX; public class BenBenFact implements Factory{ @Override public Car AllCar() { // TODO Auto-generated method stub return new BenBen(); } }
这种方法有个好处,需要创建新的车,只需要实现接口,实现里面的方法即可,也解决了简单工厂的缺陷。
简单工厂和工厂方法比较
(1)简单工厂的类复杂度低,类的个数相对少。
(2)工厂方法代码的复杂度比较高。
(3)工厂方法客户端编码复杂。
(4)工厂方法管理上难度大
以上比较:工厂方法不占优势,只是解决了开闭原则。