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

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

商品抽象

public interface Bed {
    void  getInfo();
}
public interface BedsideTable {
    void  getInfo_b();
}
public interface Chair {
    void  getInfo_c();
}

工厂抽象

/**
 * @author ggbond
 * @date 2024年04月01日 08:48
 * 一个工厂 能同时生产 床,床头柜,椅子
 */
public interface Ifactory {
    Bed productBed();
    BedsideTable productBedsideTable();
    Chair productChair();

}

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

具体工厂

/**
 * @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();
    }
}

测试内容

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();

    }
}

结果展示

我是工厂01
生产了一个 实木床
生产了一个 实木床头柜
生产了一个 餐椅
---------
我是工厂02
生产了一个 铁艺床
生产了一个 涂漆床头柜
生产了一个 办公椅

总结

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

代码下载

代码下载

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值