前言
大家好,我是练习两年半的Java练习生,最近阅读了《深入浅出设计模式(中文版)》,学习了各种设计模式,所以想出一个专栏和大家分享一下!
如果大家觉得文章还可以,欢迎关注点赞!后续还会陆续更新!!
一、定义
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确制定具体类
一个工厂可以生产一组相关的产品,而不需要知道实际产出的具体产品是什么。
二、类图
三、应用
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
五、总结
以上就是今天要讲的内容,本文介绍了设计模式中的一个非常重要的模式:抽象工厂模式。抽象工厂模式是处理一系列类组合成的产品创建,增加了灵活性、可维护性和扩展性。但同时也会增加代码量以及复杂度,增加代码的理解难度。