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

目录

什么是抽象工厂模式

基本结构

基本实现步骤

实现代码(有注释)

应用场景

简单工厂、工厂方法、抽象工厂的区别


什么是抽象工厂模式

抽象工厂模式也是一种创建型设计模式,提供了一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象⼯⼚模式可以确保⼀系列相关的产品被⼀起创建,这些产品能够相互配合使⽤。比如说有书包、托特包都有皮质包和帆布包两类型的包,可以将生产皮质包的放在一个工厂里,生产帆布包的放在另一个工厂里,这样一个工厂就可以生产一系列同类型的包。

基本结构

  • 抽象产品接口:定义产品的接口,可以定义多个抽象产品接口,如书包、托特包
  • 具体产品类:实现抽象产品接口,是产品的具体体现,如皮质书包、帆布书包
  • 抽象工厂类:声明一组用于创建产品的方法,每个方法对应一个产品
  • 具体工厂类:实现抽象工厂接口,负责创建一组具体产品对象。

基本实现步骤

  1. 定义抽象产品接口,接口中声明产品的公共方法。
  2. 实现具体产品类,在类中实现抽象产品接口中的方法。
  3. 定义抽象工厂接口,声明一组用于创建产品的方法。
  4. 实现具体工厂类,分别用于实现抽象工厂接口中的方法,每个方法负责创建一组相关的产品。
  5. 在客户端中使用抽象工厂及抽象产品创建产品。

实现代码(有注释)

java 复制代码
// 定义抽象产品接口
interface productA{
    void show();
}
interface productB{
    void buy();
}
//实现具体产品类
class productA1 implements productA{

    @Override
    public void show() {
        System.out.println("it is A1");
    }
}
class productA2 implements productA{

    @Override
    public void show() {
        System.out.println("it is A2");

    }
}
class productB1 implements productB{

    @Override
    public void buy() {
        System.out.println("it is B1");

    }
}
class productB2 implements productB{

    @Override
    public void buy() {
        System.out.println("it is B2");

    }
}
//定义抽象工厂接口
interface AbstractFactory{
    productA createProductA();
    productB createProductB();
}
//实现具体工厂类
class factory1 implements AbstractFactory{

    @Override
    public productA createProductA() {
        return new productA1();
    }

    @Override
    public productB createProductB() {
        return new productB1();
    }
}
class factory2 implements AbstractFactory{

    @Override
    public productA createProductA() {
        return new productA2();
    }

    @Override
    public productB createProductB() {
        return new productB2();
    }
}
//客户端代码
public class AbstractFactoryExample {
    public static void main(String[] args) {
//        使用工厂1创建产品A1和B1
        AbstractFactory factory1=new factory1();
        productA productA1=factory1.createProductA();
        productB productB1=factory1.createProductB();
        productA1.show();
        productB1.buy();
//        使用工厂2创建产品A2和B2
        AbstractFactory factory2=new factory2();
        productA productA2=factory2.createProductA();
        productB productB2=factory2.createProductB();
        productA2.show();
        productB2.buy();
    }
}

应用场景

抽象⼯⼚模式能够保证⼀系列相关的产品⼀起使⽤,并且在不修改客户端代码的情况下,可以⽅便地替换整个产品 系列。但是当需要增加新的产品类时,除了要增加新的具体产品类,还需要修改抽象⼯⼚接⼝及其所有的具体⼯⼚ 类,扩展性相对较差。因此抽象⼯⼚模式特别适⽤于⼀系列相关或相互依赖的产品被⼀起创建的情况。

简单工厂、工厂方法、抽象工厂的区别

  • 简单工厂 模式:一个工厂方法创建所有的产品
  • 工厂方法模式:一个工厂方法创建一个具体产品
  • 抽象工厂模式:一个工厂方法可以创建一类具体产品
相关推荐
LayZhangStrive4 小时前
设计模式(二)装饰器模式、代理模式(待更新)
设计模式·代理模式·装饰器模式·后端开发
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-28-模板方法模式(业务实战篇)
java·设计模式·模板方法模式·spring源码·订单系统·代码复用
leeyi2 天前
两个 Agent 怎么协作:Host-Worker 模式(第91篇-E77)
设计模式·agent·ai编程
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-26-策略模式(业务实战篇)
java·spring·设计模式·策略模式·支付系统·算法切换
星火10242 天前
【Groovy翻译-进阶篇】Groovy 中的设计模式
后端·设计模式·groovy
AI人工智能+电脑小能手3 天前
大白话说Java设计模式-27-策略模式(源码剖析篇)
java·spring·设计模式·策略模式·源码分析·事务管理·comparator
SL_staff3 天前
风控规则如何从硬编码解耦?我们在 JVS-Rules 中的实践与思考
java·spring boot·设计模式
小此方3 天前
Linux加餐(一):藏在Linux中的设计模式(一)策略模式与日志
linux·设计模式·策略模式
To_OC3 天前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
东方小月3 天前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架