当前位置: 首页 > news >正文

23种设计模式-抽象工厂(Abstract Factory)设计模式

抽象工厂设计模式

  • 🚩什么是抽象工厂设计模式?
  • 🚩抽象工厂模式的特点
  • 🚩抽象工厂模式的结构
  • 🚩抽象工厂模式的优缺点
  • 🚩抽象工厂方法的Java实现
  • 🚩 代码总结
  • 🚩 总结

🚩什么是抽象工厂设计模式?

抽象工厂模式(Abstract Factory Design Pattern)是一种创建型设计模式,它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们的具体类。

工厂方法模式的区别在于,抽象工厂模式通常用于处理产品族的创建,确保创建的对象是兼容的。

🚩抽象工厂模式的特点

  • 封装性:抽象工厂模式将具体产品的创建过程封装在工厂内部,客户端无需关心具体的实现细节。

  • 扩展性:当需要增加新的产品族时,只需增加新的工厂类,符合开闭原则。

  • 一致性:抽象工厂模式确保创建的产品对象之间具有一致性,避免了不兼容的产品组合。

🚩抽象工厂模式的结构

抽象工厂模式通常包含以下几个角色:

  • 抽象工厂(Abstract Factory):定义创建一系列产品对象的接口。

  • 具体工厂(Concrete Factory):实现抽象工厂接口,负责创建具体的产品对象。

  • 抽象产品(Abstract Product):定义产品对象的接口。

  • 具体产品(Concrete Product):实现抽象产品接口,是具体工厂创建的对象。

  • 客户端(Client):使用抽象工厂和抽象产品接口来创建和使用产品对象。

图例:

在这里插入图片描述

🚩抽象工厂模式的优缺点

  • 优点:

    1. 隔离具体类的生成:客户端不需要知道具体的产品类,只需要知道抽象工厂和抽象产品即可。

    2. 易于交换产品系列:只需改变具体的工厂类,就可以改变整个产品系列。

    3. 保证一致性:抽象工厂模式确保创建的产品对象之间具有一致性。

  • 缺点:

    1. 增加系统复杂性:引入抽象工厂模式会增加类的数量,增加系统的复杂性。

    2. 不易扩展新产品:如果需要增加新的产品种类,需要修改抽象工厂接口及其所有子类,违反了开闭原则。

🚩抽象工厂方法的Java实现

代码地址:GitHub

  1. 首先定义两个抽象产品(Product),里面有info方法
  • ProductA:
/*** @author hanson.huang* @version V1.0* @InterfaceName ProductA* @Description 抽象产品A* @date 2025/3/21 15:32**/
public interface ProductA {public void info();
}
  • ProductB:
/*** @author hanson.huang* @version V1.0* @InterfaceName ProductB* @Description 抽象产品B* @date 2025/3/21 15:33**/
public interface ProductB {public void info();
}
  1. 其次定义抽象工厂(Creator),用于创建产品A和产品B
/*** @author hanson.huang* @version V1.0* @InterfaceName Factory* @Description 抽象工厂* @date 2025/3/21 15:31**/
public interface Factory {public ProductA createProductA();public ProductB createProductB();
}
  1. 现在创建具体产品(Concrete Product),实现抽象产品接口,重写info方法
  • ProductA的具体实现:

    • ProductA1:
    /*** @author hanson.huang* @version V1.0* @ClassName ProductA1* @Description 具体产品A1* @date 2025/3/21 15:36**/
    public class ProductA1 implements ProductA {@Overridepublic void info() {System.out.println("产品的信息:A1");}
    }
    
    • ProductA2:
    /*** @author hanson.huang* @version V1.0* @ClassName ProductA2* @Description 具体产品A2* @date 2025/3/21 15:36**/
    public class ProductA2 implements ProductA {@Overridepublic void info() {System.out.println("产品的信息:A2");}
    }
    
  • ProductB的具体实现:

    • ProductB1:
    /*** @author hanson.huang* @version V1.0* @ClassName ProductB1* @Description 抽象产品B1* @date 2025/3/21 15:37**/
    public class ProductB1 implements ProductB {@Overridepublic void info() {System.out.println("产品的信息:B1");}
    }
    
    • ProductB2:
    /*** @author hanson.huang* @version V1.0* @ClassName ProductB2* @Description 抽象产品B2* @date 2025/3/21 15:38**/
    public class ProductB2 implements ProductB {@Overridepublic void info() {System.out.println("产品的信息:B2");}
    }
    
  1. 最后,我们创建具体工厂(Concrete Creator)来去实现抽象工厂接口,负责创建具体的对象,现在让工厂1创建产品A1和B1,让工厂2来创建产品A2和B2
  • Factory1
/*** @author hanson.huang* @version V1.0* @ClassName FactoryA* @Description 具体工厂1,用于创建具体对象A1,B1* @date 2025/3/21 15:35**/
public class Factory1 implements Factory{@Overridepublic ProductA createProductA() {return new ProductA1();}@Overridepublic ProductB createProductB() {return new ProductB1();}
}
  • Factory2
/*** @author hanson.huang* @version V1.0* @ClassName Factory2* @Description 具体工厂2,用于创建具体对象A2,B2* @date 2025/3/21 15:40**/
public class Factory2 implements Factory{@Overridepublic ProductA createProductA() {return new ProductA2();}@Overridepublic ProductB createProductB() {return new ProductB2();}
}
  1. 最后来测试一下,可以发现我们下面的主函数代码,没有涉及到抽象工厂方法和抽象类,符合解耦原则
/*** @author hanson.huang* @version V1.0* @ClassName AbstractFactory* @Description main* @date 2025/3/21 15:31**/
public class AbstractFactory {public static void main(String[] args) {Factory1 factory1 = new Factory1();ProductA productA = factory1.createProductA();productA.info();Factory2 factory2 = new Factory2();ProductB productB = factory2.createProductB();productB.info();}
}

在这里插入图片描述

🚩 代码总结

在这个示例中,我们定义了两个产品族:ProductAProductB ,并为每个产品族提供了具体实现:ProductA1ProductA2ProductB1ProductB2 。然后,我们定义了一个抽象工厂 Factory,并提供了两个具体工厂 Factory1Factory1 来创建不同的产品。客户端代码通过选择不同的工厂来创建不同的产品

🚩 总结

抽象工厂设计模式是一种强大的创建型设计模式,特别适用于需要创建一系列相关或相互依赖对象的场景。它通过封装具体产品的创建过程,确保了产品之间的一致性和兼容性。然而,抽象工厂模式也增加了系统的复杂性,并且在扩展新产品种类时可能会违反开闭原则。因此,在使用抽象工厂模式时,需要根据具体的应用场景进行权衡。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述


http://www.mrgr.cn/news/95998.html

相关文章:

  • 23种设计模式-中介者(Mediator)设计模式
  • 【视频】m3u8相关操作
  • 23种设计模式-责任链(Chain of Responsibility)设计模式
  • CI/CD(四) docker-compose 安装harbor
  • Kotlin 协程官方文档知识汇总(一)
  • sql结尾加刷题
  • 23种设计模式-享元(Flyweight)设计模式
  • 鸿蒙特效教程09-深入学习animateTo动画
  • 23种设计模式-原型(Prototype)设计模式
  • rabbitmq承接MES客户端服务器
  • 大模型重点1 【综述-文字版】
  • 23种设计模式-桥接(Bridge)设计模式
  • C++锁: 读锁,递归锁,超时锁
  • 2017年计算机真题
  • STM32 - 在机器人、自动化领域,LL库相比HAL优势明显
  • 【解决】Mybatis-plus2.x升级到3.x
  • mac vim命令快捷键
  • MapStruct动态生成实现
  • 【AI】Orin Nano+ubuntu22.04上移植YoloV11,并使用DeepStream测试成功
  • mysql高级,mysql体系结构,mysql引擎,存储过程,索引,锁