抽象ファクトリ
先ほどファクトリモデルについてお話しましたが、ファクトリモデルと比較して、抽象ファクトリは「家族」の概念を強調しています。各製品ファミリにインターフェイスを提供します。製品ファミリに複数のオブジェクトを作成できます。
別の栗を引用させてください。携帯電話市場が徐々に成長するにつれて、Appleの顧客の一部がHuaweiやXiaomiなどのブランドに流れ込むと仮定します。上級管理職は、顧客を維持するために、対応するモデルの透明なケースを将来販売される各携帯電話に送信することを決定しました。ここで、Apple 13と13の透明な携帯電話のケースはオブジェクトファミリーであり、それらは一致しています。
現時点では、ファクトリモデルは役に立ちません。結局、作成できるオブジェクトは1つだけです。オブジェクトファミリはファクトリに対応します(このファクトリは、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
}
}