JAVAデザインパターン-AbstractFactory

抽象ファクトリ

先ほどファクトリモデルについてお話しましたが、ファクトリモデルと比較して、抽象ファクトリは「家族」の概念を強調しています。各製品ファミリにインターフェイスを提供します。製品ファミリに複数のオブジェクトを作成できます。

別の栗を引用させてください。携帯電話市場が徐々に成長するにつれて、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
    }
}

おすすめ

転載: blog.csdn.net/weixin_43957211/article/details/110662631