設計モード(5)--コンストラクタモードの逆理解


コンストラクタモードとは?コンストラクタモードは、オブジェクトを作成するために存在する設計モードであり、オブジェクトが複数の単純なオブジェクトで結合され、オブジェクトの組合せが絶えず変化している場合、このオブジェクトの作成にはコンストラクタモードを使用することが考えられる.
いつ使いますか.オブジェクトが複数の単純なオブジェクトからなり、オブジェクトの組み合わせが変化し続ける場合.例えばハンバーガー、コーラは簡単なオブジェクトと見ることができますが、コースは私たちが作成するオブジェクトで、コースに含まれるオブジェクトの種類は絶えず変化しており、コースの作成はコンストラクターモードを使用するのに適しています.
どんな欠点がありますか.1,コンストラクタモードコンストラクションオブジェクトの単純オブジェクトには共通の特徴(同じインタフェースから継承)が必要であり,使用範囲が限られている.2,内部のロジックは複雑で、コードのレベルを増加しました
建設者は、ネット上のレストランのセットを例に、ハンバーガーと飲み物を組み合わせたセットを実現した.まずこの需要を実現するには、コースクラスが必要です.このクラスは異なるコースを用意することができます.このクラスも建設者を実現する鍵です.
public class MealBulider {
    public Meal prepareVegMeal(){
        Meal meal = new Meal();
        meal.addItem(“    ”);
        meal.addItem(“    ”);
        return meal;
    }
    public Meal prepareChickMeal(){
        Meal meal = new Meal();
        meal.addItem(“     ”);
        meal.addItem(“     ”);
        return meal;
    }
}

このクラスは私たちが言った作成者で、この準備コースは簡単で、Itemに製品(簡単なオブジェクト)をどんどん加えればいいのですが、Mealというクラスをどのように作成するか考えてみましょう.Mealには必ず1つの製品のリストが含まれており、ハンバーガー、コーラなどの情報を保存するために、製品を追加する方法があります.
public class Meal {
    private List foodList = new ArrayList<>();

    public void addItem(Item item){
        foodList.add(item);
    }
}

ハンバーガーとコーラが同じオブジェクトとしてItemに追加できる場合は、両方のクラスが同じItemインタフェースを継承しなければならないことがわかりやすい.【建設者の欠点の一つ】
interface Item(){}
      implements Item(){}
        implements Item(){}
      implements Item(){}
        implements Item(){}

以上、簡単なコンストラクタモデルを完成しました.
public class Client {
    public static void main(String[] args){
        MealBulider bulider = new MealBulider();
        Meal meal  = bulider.prepareChickMeal();
        Meal meal1 = bulider.prepareVegMeal();
    }
}

これによりmealには我々が必要とする組合せがあり,もちろん我々は必要に応じて単純なオブジェクト層を分割し,抽出し,最適化することができる.
今、3つ目のコースがあれば、コーラ2つはどうすればいいですか?簡単です.MealBuliderに方法を追加すれば、このコースのオブジェクトを得ることができます.