
すべてのピザ作成処理を
PizzaStore
に集中させ、しかもフランチャイズ店
に自由を与えて独自の地域スタイルを持たせる方法があります。
そのためには
createPizza()
メソッドを
PizzaStore
に戻しますが、今回はこ
のメソッドを抽象メソッドとし、それぞれの地域スタイル用のサブクラス
PizzaStore
を作成していきます。
まず、
PizzaStore
の変更点を確認しましょう。
ピザ店用のフレームワーク
public abstract class PizzaStore {
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
abstract Pizza createPizza(String type);
}
createPizza
は、ファクトリオブジェク
トのメソッドではなく、
PizzaStore
の
メソッドを呼び出すようにしています。
これらはすべて、以前と同じ
です。
ファクトリオブジェクトをこのメ
ソッドに移動しました。
「ファクトリメソッド」は
PizzaStore
の抽象メソッドに
なります。
今回は、
PizzaStore
は抽象クラスです(理由は下記を参照)。
これで、サブクラス化を待っている店ができました ...