设计模式——抽象工厂模式

一、理解

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

二、举例

到4S店买车的时候,会给销售顾问说想看的具体车型,比如A4L和A6L,销售顾问会带你看现车,而不会带你去生产厂家去看发动机,空调,车轮等其他配件。生产这个车的地方就是一个超级工厂,超级工厂里边呢,会有一系列从其他工厂已经生产好的配件,比如车轮的轮胎来自米其林,轮毂来自BBS。

三、图示

在这里插入图片描述

四、代码

产品类
//发动机以及型号  
public interface Engine {  
 
}  
public class EngineA4L implements Engine{  
    public Engine(){  
        System.out.println("制造发动机-->EngineA4L");  
    }  
}  
public class EngineA6L implements Engine{  
    public Engine(){  
        System.out.println("制造发动机-->EngineA6L");  
    }  
}


//轮胎及型号
public interface Wheel{  
 
}  
public class WheelA4L implements Wheel{  
    public Wheel(){  
        System.out.println("制造轮胎-->WheelA4L");  
    }  
}  
public class WheelA6L implements Wheel{  
    public Wheel(){  
        System.out.println("制造轮胎-->WheelA6L");  
    }  
}


//大灯及型号
public interface Lights{  
 
}  
public class LightsA4L implements Lights{  
    public Lights(){  
        System.out.println("制造大灯-->LightsA4L");  
    }  
}  
public class LightsA6L implements Lights{  
    public Lights(){  
        System.out.println("制造大灯-->LightsA6L");  
    }  
}
创建工厂类
//创建工厂的接口  
public interface AbstractFactory {  
    //制造发动机
    public Engine createEngine();
    //制造轮胎
    public Wheel createWheel(); 
    //制造大灯
    public Lights createLights(); 
} 

//生产奥迪A4L系列 
public class FactoryAudiA4L implements AbstractFactory{  
      
    @Override  
    public Engine createEngine() {    
        return new EngineA4L();  
    }  
    @Override  
    public Wheel createWheel() {  
        return new WheelA4L();  
    } 
    @Override  
    public Lights createLights() {    
        return new LightsA4L();  
    } 
} 

//生产奥迪A6L系列  
public class FactoryAudiA6L implements AbstractFactory{  
      
    @Override  
    public Engine createEngine() {    
        return new EngineA6L();  
    }  
    @Override  
    public Wheel createWheel() {  
        return new WheelA6L();  
    } 
    @Override  
    public Lights createLights() {    
        return new LightsA6L();  
    } 
} 
客户端调用
public class Customer {  
    public static void main(String[] args){  
        //要一台奥迪A4L
        FactoryAudiA4L factory = new FactoryAudiA4L();
		factory.createEngie();
		factory.createWheel();
		factory.createLights();
		
		//要一台奥迪A6L
		FactoryAudiA6L factory = new FactoryAudiA6L();
		factory.createEngie();
		factory.createWheel();
		factory.createLights();
    }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值