《设计模式(五)之——抽象工厂模式》

一、情景

上一篇博客中【设计模式(四)之——工厂模式】
介绍了我们的隔壁老王,用工厂模式制作了一个面包机,开始了面包的销售。现在老王想着推出另外一个新产品冰淇淋,并与面包组合卖一个新的产品

在这里插入图片描述


二、后续

我们那位扫地高僧很快也就给了解决方案:采用抽象工厂方法

在这里插入图片描述


三、抽象工厂(Abstract Factory)
  • 定义:提供一个接口,用于创建相关或依赖的产品家族,而不需要指定具体的类。
  • 重要组件
  • AbstarctFactory 声明一个创建抽象产品对象的操作接口
  • ConreteFactroy 具体的创建产品组的方法
  • ProductA ProductB 不同的抽象产品,组合起来形成产品家族
  • 类图:
    在这里插入图片描述
四、代码演示
4.1 定义面包接口、冰淇淋接口(两个产品)
/**
 * @author liuzihao
 * @create 2020-12-12-22:49
 * 抽象产品A (面包)
 */
public interface IbreadProductA {
    String desc();
}

/**
 * @author liuzihao
 * @create 2020-12-12-22:50
 * 抽象产品B 冰淇淋
 */
public interface IceCreamProductB {
    String desc();
}
4.2 具体的产品
  • 黑面包、荞麦面包
  • 奶油冰淇淋、抹茶冰淇淋
/**
 * @author liuzihao
 * @create 2020-12-12-22:54
 */
public class BreakBread implements IbreadProductA{
    @Override
    public String desc() {
        return "黑面包";
    }
}
/**
 * @author liuzihao
 * @create 2020-12-12-22:55
 */
public class BuckaBread implements IbreadProductA{
    @Override
    public String desc() {
        return "荞麦面包";
    }
}

public class CreamIce implements IceCreamProductB{
    @Override
    public String desc() {
        return "奶油冰淇淋";
    }
}

public class MatchaIce implements  IceCreamProductB{
    @Override
    public String desc() {
        return "抹茶冰淇淋";
    }
}

4.3 抽象工厂(生产一系列相关接口)
/**
 * @author liuzihao
 * @create 2020-12-12-22:59
 * 抽象工厂,生产两种商品
 */
public interface AbstractFactory {

    IbreadProductA creatProductA();

    IceCreamProductB creatProductB();
}

4.4 工厂1生产 ( 黑面包…奶油冰淇淋)
public class ConcreteFactroy1 implements AbstractFactory{
    @Override
    public IbreadProductA creatProductA() {
        return new BreakBread();
    }

    @Override
    public IceCreamProductB creatProductB() {
        return new CreamIce();
    }
}
4.5 工厂2生产(黑面包…抹茶冰淇淋)
public class ConcreteFactroy2 implements AbstractFactory{
    @Override
    public IbreadProductA creatProductA() {
        return new BreakBread();
    }

    @Override
    public IceCreamProductB creatProductB() {
        return new MatchaIce();
    }
}
4.6 测试
  System.out.println("老王的新店开张了.....");
        System.out.println("....一号产品....");
        AbstractFactory factory = new ConcreteFactroy1();
        System.out.println(factory.creatProductA().desc()+"..."+factory.creatProductB().desc());

        System.out.println("....二号产品....");
        AbstractFactory factory2 = new ConcreteFactroy2();
        System.out.println(factory2.creatProductA().desc()+"..."+factory2.creatProductB().desc());

        System.out.println("....期待三号产品....");

在这里插入图片描述

五、小结

利用抽象工厂方法,定义了一个用于生产一系列产品家族,当需要生产新的产品时,我们只需要创建工厂即可,进行产品组合,符合开闭原则,方便拓展。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值