• 设计模式——抽象工厂模式02


    如果是工厂模式是对同一类商品进行抽象然后生产。
    那么抽象工厂模式是对工厂的抽象,每个工厂都能生产多种产品,不同工厂生产的商品性质相同,但外观,品牌会略有差异。
    设计模式,一定要敲代码理解
    在这里插入图片描述

    商品抽象

    public interface Bed {
        void  getInfo();
    }
    
    • 1
    • 2
    • 3
    public interface BedsideTable {
        void  getInfo_b();
    }
    
    • 1
    • 2
    • 3
    public interface Chair {
        void  getInfo_c();
    }
    
    • 1
    • 2
    • 3

    工厂抽象

    /**
     * @author ggbond
     * @date 2024年04月01日 08:48
     * 一个工厂 能同时生产 床,床头柜,椅子
     */
    public interface Ifactory {
        Bed productBed();
        BedsideTable productBedsideTable();
        Chair productChair();
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    具体抽象商品,看代码这里不展示了。

    具体工厂

    /**
     * @author ggbond
     * @date 2024年04月01日 08:53
     * 工厂1 负责 生产  实木床, 实木床头柜,餐厅椅
     */
    public class Factory01 implements Ifactory{
        static {
            System.out.println("我是工厂01");
        }
        @Override
        public Bed productBed() {
            return new WoodBed();
        }
    
        @Override
        public BedsideTable productBedsideTable() {
            return new SolidWoodBedsideTable();
        }
    
        @Override
        public Chair productChair() {
            return new DiningChair();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    测试内容

    public class Main {
        public static void main(String[] args) {
            Ifactory factory01=new Factory01();
    
            Bed bed=factory01.productBed();
            BedsideTable bedsideTable = factory01.productBedsideTable();
            Chair chair = factory01.productChair();
    
            bed.getInfo();
            bedsideTable.getInfo_b();
            chair.getInfo_c();
    
            System.out.println("---------");
    
            Ifactory factory02=new Factory02();
    
            Bed bed02=factory02.productBed();
            BedsideTable bedsideTable02 = factory02.productBedsideTable();
            Chair chair02 = factory02.productChair();
    
            bed02.getInfo();
            bedsideTable02.getInfo_b();
            chair02.getInfo_c();
    
        }
    }
    
    • 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

    结果展示

    我是工厂01
    生产了一个 实木床
    生产了一个 实木床头柜
    生产了一个 餐椅
    ---------
    我是工厂02
    生产了一个 铁艺床
    生产了一个 涂漆床头柜
    生产了一个 办公椅
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    总结

    不同工厂生产同一商品族,但商品外形,品牌可差异化。
    如果仅加 新工厂,对于商品也要对应实现。实现了单一与开闭原则
    如果每个工厂新增商品 如上述家具工厂新增电视柜,那么之前每个工厂内部要加 生产电视柜 方法 与电视柜抽象与实现,破坏了开闭,同时当工厂数量过多时,改动工作量亦剧增。

    代码下载

    代码下载

  • 相关阅读:
    Spring中@Value的三种使用方式
    网络编程-----socket函数
    Unity和UE4两大游戏引擎,你该如何选择?
    机器学习强基计划5-4:图文详解影响流动与有向分离(D-分离)(附Python实现)
    QAD1 持续交付 Continuous Delivery
    详解Spring Boot中@PostConstruct的使用
    最新支付宝蚂蚁森林自动偷能量,解放双手
    Python Jupyter Notebook效率开发工具
    【Matplotlib绘制图像大全】(二十八):Matplotlib使用imshow()可视化图像
    web安全应用-XSS跨站脚本初级
  • 原文地址:https://blog.csdn.net/qq_45178641/article/details/137220713