《设计模式(五)之——抽象工厂模式》
作者:互联网
一、情景
上一篇博客中【设计模式(四)之——工厂模式】
介绍了我们的隔壁老王,用工厂模式制作了一个面包机,开始了面包的销售。现在老王想着推出另外一个新产品冰淇淋,并与面包组合卖一个新的产品
二、后续
我们那位扫地高僧很快也就给了解决方案:采用抽象工厂方法
三、抽象工厂(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("....期待三号产品....");
五、小结
利用抽象工厂方法,定义了一个用于生产一系列产品家族,当需要生产新的产品时,我们只需要创建工厂即可,进行产品组合,符合开闭原则,方便拓展。
标签:12,return,冰淇淋,工厂,抽象,Override,设计模式,public,desc 来源: https://blog.csdn.net/weixin_43732955/article/details/111085683