其他分享
首页 > 其他分享> > 《设计模式(五)之——抽象工厂模式》

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

作者:互联网

一、情景

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

在这里插入图片描述


二、后续

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

在这里插入图片描述


三、抽象工厂(Abstract Factory)

四、代码演示

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("....期待三号产品....");

在这里插入图片描述

五、小结

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

标签:12,return,冰淇淋,工厂,抽象,Override,设计模式,public,desc
来源: https://blog.csdn.net/weixin_43732955/article/details/111085683