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

要理解抽象工厂模式,首先要理解产品树和产品族的概念
产品树:例如宝马汽车的引擎和车灯
产品族:宝马汽车的引擎和奥迪汽车的引擎是同一个产品族

一个具体工厂生产一个属于一个产品树的产品,这样生产出来的产品就是同一个具体类型的了,不用再去做相应的控制!

来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):
抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

抽象工厂模式类图

抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。比如宝马使用空调型号A和发动机型号A,而奥迪使用空调型号B和发动机型号B,那么使用抽象工厂模式,在为宝马生产相关配件时,就无需制定配件的型号,它会自动根据车型生产对应的配件型号A。

产品代码如下:

public interface Engine {

}
public class EngineAudi implements Engine {

    public EngineAudi() {
        System.out.println("生产了奥迪的引擎!");
    }

}
public class EngineBMW implements Engine {
    public EngineBMW(){
        System.out.println("生产BMW引擎!");
    }
}
public interface Light {

}
public class LightAudi implements Light {

    public LightAudi() {
        System.out.println("生产了奥迪的车灯!");
    }

}
public class LightBMW implements Light {
    public LightBMW(){
        System.out.println("生产BMW车灯!");
    }
}

工厂代码如下:

/**
 * 抽象工厂模式中的抽象工厂
 * @author Administrator
 *
 */
public interface AbstractFactory {

    //生产引擎
    public Engine createEngine();

    //生产车灯
    public Light createLight();
}
public class AudiFactory implements AbstractFactory{

    @Override
    public Engine createEngine() {
        return new EngineAudi();
    }

    @Override
    public Light createLight() {
        return new LightAudi();
    }

}
public class BMWFactory implements AbstractFactory{

    @Override
    public Engine createEngine() {
        return new EngineBMW();

    }

    @Override
    public Light createLight() {
        return new LightBMW();
    }

}

客户代码如下:

public class customer {
    public static void main(String[] args) {
        BMWFactory b = new BMWFactory();
        b.createEngine();
        b.createLight();

        AudiFactory a = new AudiFactory();
        a.createEngine();
        a.createLight();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值