思想
抽象工厂:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
抽象工厂是工厂方法的升级版,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。
代码实现
工厂方法只能加咖啡,不能拓展其他业务,所以使用抽象工厂。
//抽象工厂
public interface DessertFactory {
Coffee createCoffee();
Dessert createDessert();
}
---------------------------------------------------------------------------------------
//具体工厂
//美式甜点工厂
public class AmericanDessertFactory implements DessertFactory {
public Coffee createCoffee() {
return new AmericanCoffee();
}
public Dessert createDessert() {
return new MatchaMousse();
}
}
//意大利风味甜点工厂
public class ItalyDessertFactory implements DessertFactory {
public Coffee createCoffee() {
return new LatteCoffee();
}
public Dessert createDessert() {
return new Tiramisu();
}
}
优点与缺点
优点:
当一个产品族中的多个对象被设计成一起工作时,能保证客户端始终只使用同一个产品族中的对象。
缺点:
当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。
使用场景
一个对象族(或是一组没有任何关系的对象)都有相同的约束。 涉及不同操作系统的时候,都可以考虑使用抽象工厂模式。