抽象工厂(Abstract Factory)
前面我们说了工厂模式,抽象工厂相较于工厂模式,突出了“家族”的概念。在针对每个产品族都提供一个接口,可以创建一个产品族里的多个对象。
我又举个栗子,假设随着手机市场的逐步壮大,苹果的客户有部分流向华为,小米等品牌。为了留住客户,高层决定以后售出的每台手机都送对应型号的手机透明壳。这里苹果13和13的透明手机壳就是一个对象家族,他们之间是配套的。
这时候,工厂模式就派不上用场了,毕竟只能创建一个对象。一个对象家族对应一个工厂(这个工厂可以创建多个对象,例如iphone13,iphone13的手机壳)
产品类:
public abstract class Apple {
}
public abstract class IphoneCase {
}
public class Iphone12 extends Apple {
}
public class Iphone11 extends Apple {
}
public class Iphone12Case extends IphoneCase {
}
public class Iphone11Case extends IphoneCase {
}
家族工厂类:
public abstract class AbstractFactory {
abstract Apple createPhoneProduct();
abstract IphoneCase createCaseProduct();
}
public class Series12Factory extends AbstractFactory {
Apple createPhoneProduct() {
return new Iphone12();
}
IphoneCase createCaseProduct() {
return new Iphone12Case();
}
}
public class Series11Factory extends AbstractFactory {
Apple createPhoneProduct() {
return new Iphone11();
}
IphoneCase createCaseProduct() {
return new Iphone11Case();
}
}
客户类:
public class Customer {
public static void main(String[] args) {
//这里创建12系列的产品
AbstractFactory abstractFactory = new Series12Factory();
Apple iphone = abstractFactory.createPhoneProduct();
IphoneCase iphoneCase = abstractFactory.createCaseProduct();
// do something with productA and productB
}
}