设计模式之抽象工厂模式


前言

大家好,我是练习两年半的Java练习生,最近阅读了《深入浅出设计模式(中文版)》,学习了各种设计模式,所以想出一个专栏和大家分享一下!
如果大家觉得文章还可以,欢迎关注点赞!后续还会陆续更新!!


一、定义

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确制定具体类

一个工厂可以生产一组相关的产品,而不需要知道实际产出的具体产品是什么。

二、类图

image.png

三、应用

3.1 需求

下面我们以一个例子来演示抽象工厂模式的用法。假设我们要创建一个计算机,计算机由 CPU、内存和硬盘组成,我们可以使用抽象工厂模式来创建它们。

3.2 分析

我们可以发现,每种硬件都有许多的实现,我们一台电脑则需要把这些不同的实体类组合起来,我们可以为每种不同的组合创建一个工厂,负责该组合的电脑的生产。

3.3 实现

首先,我们需要定义 CPU、内存和硬盘这三个接口,代码如下:

public interface CPU {
    void calculate();
}

public interface Memory {
    void store();
}

public interface HardDisk {
    void read();
}

接下来,我们需要定义抽象工厂接口 ComputerFactory,该接口包含了创建 CPU、内存和硬盘的方法。代码如下:

public interface ComputerFactory {
    CPU createCPU();
    Memory createMemory();
    HardDisk createHardDisk();
}

然后,我们需要定义两个具体的工厂类,分别是 IntelFactory 和 AMDFactory,它们实现了 ComputerFactory 接口,可以创建不同品牌的 CPU、内存和硬盘。代码如下:

public class IntelFactory implements ComputerFactory {
    @Override
    public CPU createCPU() {
        return new IntelCPU();
    }

    @Override
    public Memory createMemory() {
        return new IntelMemory();
    }

    @Override
    public HardDisk createHardDisk() {
        return new IntelHardDisk();
    }
}

public class AMDFactory implements ComputerFactory {
    @Override
    public CPU createCPU() {
        return new AMDCPU();
    }

    @Override
    public Memory createMemory() {
        return new AMDMemory();
    }

    @Override
    public HardDisk createHardDisk() {
        return new AMDHardDisk();
    }
}

其中,IntelFactory 可以创建 IntelCPU、IntelMemory 和 IntelHardDisk 对象,而 AMDFactory 可以创建 AMDCPU、AMDMemory 和 AMDHardDisk 对象。

最后,我们可以在客户端代码中使用抽象工厂模式来创建计算机。例如:

public class Client {
    public static void main(String[] args) {
        // 创建一个 Intel 计算机
        ComputerFactory factory = new IntelFactory();
        CPU cpu = factory.createCPU();
        Memory memory = factory.createMemory();
        HardDisk hardDisk = factory.createHardDisk();
        // 组装计算机
        Computer computer = new Computer(cpu, memory, hardDisk);
        // 使用计算机
        computer.run();
        
        // 创建一个 AMD 计算机
        factory = new AMDFactory();
        cpu = factory.createCPU();
        memory = factory.createMemory();
        hardDisk = factory.createHardDisk();
        // 组装计算机
        computer = new Computer(cpu, memory, hardDisk);
        // 使用计算机
        computer.run();
    }
}

四、问题

在java中什么地方用到了抽象工厂模式 ?
提示:JDBC or Spring


五、总结

以上就是今天要讲的内容,本文介绍了设计模式中的一个非常重要的模式:抽象工厂模式。抽象工厂模式是处理一系列类组合成的产品创建,增加了灵活性、可维护性和扩展性。但同时也会增加代码量以及复杂度,增加代码的理解难度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值