• Java23种设计模式-创建型模式之抽象工厂模式


    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它用于创建相关相互依赖对象的一组,而无需指定具体的类。这种模式特别适用于产品族的情况,即一组相互关联的产品对象

    存在四种角色:
    角色1:抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的
    角色2:具体工厂角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的
    角色3:抽象产品角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口
    角色4:具体产品角色抽象工厂模式创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。

    优点包括:
    1.具体产品在应用层代码隔离,无须关心创建细节。
    2.将一个系列的产品族统一到一起创建
    主要缺点:
    规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口。
    增加了系统的抽象性和理解难度。

    示例:定义了两个产品接口ProductA和ProductB,以及它们的具体实现ConcreteProductA1和ConcreteProductB1。然后定义了一个工厂接口Factory和一个具体工厂ConcreteFactory,它负责创建产品对象。最后,在客户端代码中,我们通过工厂创建了产品对象并调用它们的方法

    //抽象产品A
    public interface ProductA {
        void useProductA();
    }
    // 具体产品A1
    public class ConcreteProductA1 implements ProductA{
        @Override
        public void useProductA() {
            System.out.println("使用产品A1");
        }
    }
    //抽象产品B
    interface ProductB {
        void useProductB();
    }
    //具体产品B1
    public class ConcreteProductB1 implements ProductB {
        @Override
        public void useProductB() {
            System.out.println("使用产品B1");
        }
    }
    // 抽象工厂
    public interface Factory {
        ProductA createProductA();
        ProductB createProductB();
    }
    // 具体工厂
    public class ConcreateFactory implements Factory{
        @Override
        public ProductA createProductA() {
            System.out.println("具体产品实例化A1");
            return new ConcreteProductA1();
        }
    
        @Override
        public ProductB createProductB() {
            System.out.println("具体产品实例化B1");
            return new ConcreteProductB1();
        }
    }
    // 客户端调用测试
    public class Client {
        public static void main(String[] args) {
            //工厂实例化
            Factory factory = new ConcreateFactory();
            //工厂调用
            ProductA productA = factory.createProductA();
            ProductB productB = factory.createProductB();
            
            productA.useProductA();
            productB.useProductB();
        }
    }
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
  • 相关阅读:
    Android中OkHttp源码阅读二(责任链模式)
    项目质量管理
    记录一次通过社工进网站后台
    「设计模式」六大原则之六:最小知识原则小结
    搭建WordPress
    nsight computer运行失败问题
    vue3.2 vite项目使用 eslint + prettierrc规范
    数学基础之最大似然准则
    2分能出线,6分却不能出线?世界杯小组赛的出线规则这次真被我整明白了
    python执行unity打包
  • 原文地址:https://blog.csdn.net/csy08845/article/details/138068470