ファクトリモード2

12242 ワード


抽象ファクトリモード


これは、相互に関連付けられたオブジェクトインタフェースまたは依存するオブジェクトインタフェースを提供する方法です.
以前に作成したクラスを表示します.
2つの抽象レベルのピザ、ピザStoreがあります
その下には、それぞれのピザやピザ屋が存在します.
どこでピザを作っても、生地やチーズなどの材料を繰り返し入れます.
そのため、様々な材料を作るPizzaIngredentFactoryは、このインターフェースを受けて、それぞれのピザのスタイルで工場を実施すればよいのです.
public interface PizzaIngredientFactory { 
  public Dough createDough(); // 각 재료별 클래스가 추가되었다. 
  public Sauce createSauce(); 
  public Cheese createCheese(); 
  public Pepperoni createPepperoni(); 
}
このインタフェースを受け入れるNYPizzaIngredent Factoryです.
public class NYPizzaIngredientFactory implements PizzaIngredientFactory { 
  public Dough createDough() { 
  	return new ThinCrustDough(); 
  }
  public Sauce createSauce() { 
  	return new MarinaraSauce(); 
  } 
  public Cheese createCheese() { 
  	return new ReggianoCheese(); 
  } 
  public Pepperoni createPepperoni() { 
  	return new SlicePepperoni(); 
  } 
  public Clams createClam() { 
  	return new FreshClams(); 
  } 
}
public class NYPizzaStore extends PizzaStore {
    protected Pizza createPizza(String item) {
        Pizza pizza = null;
        PizzaIngredientFactory ingredientFactory = new NYPizzaIngredientFactory();
        if (item.equals("cheese")) {
            pizza = new CheesePizza(ingredientFactory);
            pizza.setName("New York Style Cheese Pizza");
        } else if (item.equals("clam")) {
            pizza = new ClamPizza(ingredientFactory);
            pizza.setName("New York Style Clam Pizza");
        } else if (item.equals("pepperoni")) {
            pizza = new PepperoniPizza(ingredientFactory);
            pizza.setName("New York Style Pepperoni Pizza");
        }
        return pizza;
    }
}
NYPizzaStoreが受け取ってピザを作るレベルです
NYPizzaIngredentFactoryを入手し、ここで材料を作って使う方法.
public class CheesePizza extends Pizza {
    PizzaIngredientFactory ingredientFactory;
    public CheesePizza(PizzaIngredientFactory ingredientFactory) {
    this.ingredientFactory = ingredientFactory;
} 
    void prepare() {
        System.out.println("Preparing " + name);
        dough = ingredientFactory.createDough();
        sauce = ingredientFactory.createSauce();
        cheese = ingredientFactory.createCheese();
    }
}
最終的にピザが決定されると、選択されたピザでは、生成者によってIngreedintFactoryが得られ、create法によって様々な材料が作られる.

メリットとデメリット


したがって,モードを用いることで実装クラスへの依存性を低減でき,抽象的なDIPをうまく守ることができる.ただし、インタフェースの作成、新しいオブジェクトの作成、変更が必要な場所はたくさんあります.

n/a.結論


簡約工場,工場法,抽象工場ともに結論的にばらばらに結合し,変化した部分をカプセル化することにより,変更(OCP)依存性を減らす観点から有意である(DIP).