• 【创建型】抽象工厂模式(Abstract Factory)


    抽象工厂模式(Abstract Factory)

    提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。

    适用场景

    • 一个系统要独立于它的产品的创建、组合和表示时。
    • 一个系统要由多个产品系列中的一个来配置时。
    • 当要强调一系列相关的产品对象的设计以便进行联合使用时。
    • 当提供一个产品类库,只想显示它们的接口而不是实现时。
      在这里插入图片描述
      ✦ AbstractFactory声明一个创建抽象产品对象的操作接口。
      ✦ ConcreteFactory实现创建具体产品对象的操作。
      ✦ AbstractProduct为一类产品对象声明一个接口。
      ✦ ConcreteProduct定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct接口。
      ✦ Client仅使用由AbstractFactory和AbstractProduct类声明的接口。

    抽象工厂模式实例代码(Java)

    //抽象产品A,AbstractProduct为一类产品对象声明一个接口。
    interface ProductA {
        void info();
    }
    //ConcreteProduct定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct接口。
    class ProductA1 implements ProductA {
        @Override
        public void info() {
            System.out.println("产品的信息:A1");
        }
    }
    class ProductA2 implements ProductA {
        @Override
        public void info() {
            System.out.println("产品的信息:A2");
        }
    }
    
    //抽象产品B,AbstractProduct为一类产品对象声明一个接口。
    interface ProductB {
        void info();
    }
    class ProductB1 implements ProductB {
        @Override
        public void info() {
            System.out.println("产品的信息:B1");
        }
    }
    class ProductB2 implements ProductB {
        @Override
        public void info() {
            System.out.println("产品的信息:B2");
        }
    }
    
    //Client仅使用由AbstractFactory和AbstractProduct类声明的接口。
    public class AbstractFactory {
        public static void main(String[] args) {
    
            Factory factory1 = new Factory1();
            ProductA productA = factory1.createProductA();
            productA.info();
    
            Factory factory2 = new Factory2();
            ProductB productB = factory2.createProductB();
            productB.info();
        }
    }
    
    //抽象工厂,AbstractFactory声明一个创建抽象产品对象的操作接口。
    interface Factory {
        ProductA createProductA();
        ProductB createProductB();
    }
    
    //具体工厂Factory1,ConcreteFactory实现创建具体产品对象的操作。
    class Factory1 implements Factory {
        @Override
        public ProductA createProductA() {
            return new ProductA1();
        }
        @Override
        public ProductB createProductB() {
            return new ProductB1();
        }
    }
    //具体工厂Factory2,ConcreteFactory实现创建具体产品对象的操作。
    class Factory2 implements Factory {
        @Override
        public ProductA createProductA() {
            return new ProductA2();
        }
        @Override
        public ProductB createProductB() {
            return new ProductB2();
        }
    }
    
    • 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
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    其他设计模式详见本专栏其他博文~
    特别感谢zst_2001在备考软考期间提供的帮助,贴上博主B站
    zst_2001的个人空间

  • 相关阅读:
    2022宁夏杯C新冠疫情对宁夏旅游业的影响分析及对策研究
    Kafka - topic producer consumer 常用命令
    【记录】非常实用,Python编码规范的一些建议(1)
    科技前沿:Web3与物联网的智能连接
    拓扑排序之课程表问题 bfs, dfs 双解
    教育、卫生和社会服务-省级面板数据数据(1994-2019年)
    查找浏览器中保存的密码
    搭建完菜单后运行不显示菜单的原因及其解决方法(拼图小游戏)
    中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)
    K8S配置资源管理
  • 原文地址:https://blog.csdn.net/qq_44033208/article/details/127725605