当前位置:编程学习 > JAVA >>

玩转工厂模式

最近在看《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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,