玩转工厂模式
最近在看《headfirst 设计模式》,发现简单工厂,工厂模式,抽象工厂模式这三者的区别于联系不是太好理解,经过研究之后,写几个例子,加深一下印象。上一篇介绍了简单工厂模式,《玩转简单工厂模式》,下面再写一个工厂模式的例子
package go.derek; //这是一个抽象工厂类 public abstract class CarFactory{ abstract void brand(); abstract Car create(String type); } //宝马工厂,继承了抽象工厂类 class BmwFactory extends CarFactory{ public void brand(){ System.out.println("这是宝马工厂,采用 宝马 指定配件与制造工艺"); } //宝马的工厂方法 public Car create(String type) { if(type.equals("745Li")){ return new Bmw_745Li(); } else if(type.equals("765Li")){ return new Bmw_765Li(); } else return null; } } //奥迪工厂,继承了抽象工厂类 class AudiFactory extends CarFactory{ public void brand(){ System.out.println("这是奥迪工厂,采用 奥迪 指定配件与制造工艺"); } //奥迪的工厂方法 public Car create(String type) { if(type.equals("A8L")){ return new Audi_A8L(); } else if(type.equals("A6L")){ return new Audi_A6L(); } else return null; } } //小汽车的抽象类 abstract class Car{ abstract void intro(); } //宝马745Li class Bmw_745Li extends Car{ private String type="Bmw_745Li"; public void intro(){ System.out.println("这辆宝马的型号是"+type+""); } } //宝马765Li class Bmw_765Li extends Car{ private String type="Bmw_765Li"; public void intro(){ System.out.println("这辆宝马的型号是"+type+""); } } //奥迪A8L class Audi_A8L extends Car{ private String type="A8L"; public void intro(){ System.out.println("这辆奥迪的型号是"+type+""); } } //奥迪A6L class Audi_A6L extends Car{ private String type="A6L"; public void intro(){ System.out.println("这辆奥迪的型号是"+type+""); } } [java] view plaincopy package go.derek; //测试类,模拟客户端调用 public class FactoryTest{ public static void main(String[] args){ //创建宝马工厂对象 CarFactory bmw=new BmwFactory(); //执行宝马工厂的流程 bmw.brand(); //获得指定型号的宝马车 Car car1=bmw.create("745Li"); car1.intro(); Car car2=bmw.create("765Li"); car2.intro(); //创建奥迪工厂对象 CarFactory audi=new AudiFactory(); //执行奥迪工程的流程 audi.brand(); //获得指定型号的奥迪车 Car car3=audi.create("A6L"); car3.intro(); Car car4=audi.create("A8L"); car4.intro(); } }
运行结果如下
这是宝马工厂,采用 宝马 指定配件与制造工艺
这辆宝马的型号是Bmw_745Li
这辆宝马的型号是Bmw_765Li
这是奥迪工厂,采用 奥迪 指定配件与制造工艺
这辆奥迪的型号是A6L
这辆奥迪的型号是A8L
对比上一篇简单工厂设计模式,可以看出,产品Car基本一致,只不过工厂类有了区别,简单工厂是一个工厂生产所有汽车,工厂模式则是一个工厂只生产一种品牌的车。显然如果有很多品牌,很多型号的车的话,依赖关系要比简单模式简单的多,扩展起来也方便的多。
补充:软件开发 , Java ,