设计模式之抽象工厂模式精讲

本文介绍了抽象工厂模式的概念,它是工厂方法模式的扩展,支持多个产品线。通过创建接口和类来模拟汽车生产过程,展示了如何使用抽象工厂创建不同品牌车辆的组件。
摘要由CSDN通过智能技术生成

概念:为创建一组相关或相互依赖的对象提供一个接口,而且无须指定他们的具体类。

抽象工厂模式是工厂方法模式的升级版本。在存在多个业务品种或分类时,抽象工厂模式是一种更好的解决方式。

抽象工厂模式的UML类图如下:
在这里插入图片描述

可以看出来,和工厂方法模式最大的区别就是支持了更多的产品线。还是通过一个例子来帮助大家理解这个过程。假设一辆车的生产过程只有车架、引擎和轮胎这三个步骤。我们创建这三个接口,对应UML图中的ProductA和ProductB,当然这里是三种产品,也可以更多。然后生产奔驰和宝马两个产品线,即创建6个类,奔驰车的车架、引擎和轮胎,宝马车的车架、引擎和轮胎,分别继承自车架、引擎和轮胎接口。然后在工厂类这边,我们创建一个带有3个方法的接口,分别是创建车架、创建引擎、创建轮胎。这样一来,我们的两个实现类(奔驰生产工厂和宝马生产工厂)就可以分别有一条生产汽车的流水线了。然后我们看代码。

public interface CarFrame {
    void getCarFrame();
}

public class BmwCarFrame implements CarFrame {
    @Override
    public void getCarFrame() {
        System.out.println("宝马车架完工");
    }
}

public class BenzCarFrame implements CarFrame {
    @Override
    public void getCarFrame() {
        System.out.println("奔驰车架完工");
    }
}

public interface Engine {
    void getEngine();
}

public class BmwEngine implements Engine {
    @Override
    public void getEngine() {
        System.out.println("宝马引擎完工");
    }
}

public class BenzEngine implements Engine {
    @Override
    public void getEngine() {
        System.out.println("奔驰引擎完工");
    }
}

public interface Tire {
    void getTire();
}

public class BmwTire implements Tire {
    @Override
    public void getTire() {
        System.out.println("宝马轮胎完工");
    }
}

public class BenzTire implements Tire {
    @Override
    public void getTire() {
        System.out.println("奔驰轮胎完工");
    }
}

public interface CarFactory {
    CarFrame createCarFrame();
    Engine createEngine();
    Tire createTire();
}

public class BmwFactory implements CarFactory {
    @Override
    public CarFrame createCarFrame() {
        return new BmwCarFrame();
    }
    @Override
    public Engine createEngine() {
        return new BmwEngine();
    }
    @Override
    public Tire createTire() {
        return new BmwTire();
    }
}

public class BenzFactory implements CarFactory {
    @Override
    public CarFrame createCarFrame() {
        return new BenzCarFrame();
    }
    @Override
    public Engine createEngine() {
        return new BenzEngine();
    }
    @Override
    public Tire createTire() {
        return new BenzTire();
    }
}

public class Demo {
    public static void main(String[] args) {
        BmwFactory bmwFactory = new BmwFactory();
        CarFrame bmwFrame = bmwFactory.createCarFrame();
        bmwFrame.getCarFrame();
        Engine bmwEngine = bmwFactory.createEngine();
        bmwEngine.getEngine();
        Tire bmwTire = bmwFactory.createTire();
        bmwTire.getTire();
        System.out.println("宝马车生产完成");
        System.out.println("****************分割线*******************");
        BenzFactory benzFactory = new BenzFactory();
        CarFrame benzFrame = benzFactory.createCarFrame();
        benzFrame.getCarFrame();
        Engine benzEngine = benzFactory.createEngine();
        benzEngine.getEngine();
        Tire benzTire = benzFactory.createTire();
        benzTire.getTire();
        System.out.println("奔驰车生产完成");
    }
}

大家如果需要视频版本的讲解,可以关注下我的B站:

四、设计模式之抽象工厂模式精讲

  • 31
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值