
PizzaStore
クラスを数か所変更するだけで、具象クラスのインスタンス化を
オブジェクトが処理していたのが、サブクラスがその責務を負うようになりま
した。詳しく見てみましょう。
PizzaStore
のサブクラスの
createPizza()
メソッドでオブ
ジェクトのインスタンス化を
処理します。
createPizza()
NYStylePizzaS
tore
createPizza()
ChicagoStylePizza
Store
ファクトリメソッドを宣言する
public abstract class PizzaStore {
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
protected abstract Pizza createPizza(String type);
//
他のメソッド
}
Pizza
のインスタンス化の全
責務は、ファクトリの役割を
果たすメソッドに移行しまし
た。
ファクトリメソッドはオブジェクトの作成に対処し、オブジェクト作成
をサブクラス内にカプセル化します。これによって、スーパークラスの
クライアントコードをサブクラスのオブジェクト作成コードから分離し
ます。
コードクローズアップ
abstract Product factoryMethod(String ...