玩转简单工厂设计模式
最近在看《headfirst 设计模式》,发现简单工厂,工厂模式,抽象工厂模式这三者的区别于联系不是太好理解,经过研究之后,写几个例子,加深一下印象。
首先是简单工厂
package go.derek;//测试类public class FactoryTest{public static void main(String[] args){Car car1=CarFactory.create("宝马", "745Li");car1.intro();Car car2=CarFactory.create("奥迪", "A8L");car2.intro();}}运行结果如下
这是一辆宝马车,型号是745Li
这是一辆奥迪车,型号是A8L
在测试类里面可以看到运行时多态的效果,调用intro方法的不是具体的宝马或奥迪,而是car接口的引用。
在测试类里面也看不到new关键字,对象的创建被成功封装在了create这个工厂方法里面。
在实际应用中,这个测试类其实就相当于一个客户端的调用,所以这个工厂方法就成功将具体的car实现类与客户端类解耦了。
但简单工厂模式的局限也很明显。当car的实现类大量增加的时候,工厂方法里面的依赖变得臃肿起来,宝马不仅有745型号,还有735,755,523,525,320,323,325等等。。
同样奥迪也是一样,此外汽车品牌也绝对不只有这两个。。奔驰,法拉利,宾利,路虎,数不胜数。。所以简单工厂模式适用于实现类不是太多,扩展可能性不太大的情形。