シンプルファクトリーデザインパターン
ファクトリー設計パターンの実現テストします
シナリオ
ピザショップの例で勉強しましょう
ニューヨークとシカゴに支店を持つピザチェーン店の運用アプリを作ろうと思います
ピザが数種類とトッピングが数種類あります
支店 | 種類 |
---|---|
ニューヨーク | |
ニューヨークスタイルチーズピザ | |
ニューヨークスタイルギリシャピザ | |
ニューヨークスタイルペッパーピザ | |
シカゴ | |
シカゴスタイルチーズピザ | |
シカゴスタイルギリシャピザ | |
シカゴスタイルペッパーピザ |
クラス図
店舗マネージャコード
namespace P112Factory
{
public class StoreSystemManager
{
private static void Main(string[] args)
{
PizzaStore nyStore = new NYPizzaStore();
Pizza? pizza = nyStore.OrderPizza("チーズ");
Console.WriteLine($"イーサンの注文は、{pizza?.Name}");
Console.WriteLine();
PizzaStore chikagoStore = new ChicogoPizzaStore();
pizza = chikagoStore.OrderPizza("チーズ");
Console.WriteLine($"ジョエルの注文は、{pizza?.Name}");
}
}
}
説明
支店を作ります
PizzaStore nyStore = new NYPizzaStore();
支店でピザを注文します
Pizza? pizza = nyStore.OrderPizza("チーズ");
注文したピザ名を表示します
Console.WriteLine($"イーサンの注文は、{pizza?.Name}");
支店ごとのコード
namespace P112Factory
{
internal class NYPizzaStore : PizzaStore
{
protected override Pizza? CreatePizza(string type)
{
if (type == "チーズ")
{
return new NYStyleCheesePizza();
}
if (type == "ギリシャ")
{
return new NYStyleGreekPizza();
}
if (type == "ペパロニ")
{
return new NYStylePepperoniPizza();
}
return null;
}
}
}
説明
CreatePizzaメソッドは、ピザを作るためのメソッドになります
作るピザの種類を引数で渡します
戻り値は作ったピザのインスタンスです
protected override Pizza? CreatePizza(string type)
引数によって作るピザを選択して実際のインスタンスを返します
if (type == "チーズ")
{
return new NYStyleCheesePizza();
}
支店ごとのピザコード
コンストラクタに支店ごとの個別ピザの情報を入れておきます
新しくインスタンスが作られた時の値になります
ピザ基本クラスの派生クラスにあたります
namespace P112Factory
{
internal class NYStyleCheesePizza : Pizza
{
public NYStyleCheesePizza()
{
Name = "ニューヨークスタイルのソース&チーズピザ";
Dough = "薄いクラスト";
Sauce = "マリナラ";
Toppings.Add("すりおろしたレッジャーのチーズ");
}
}
}
ピザの基本クラスコード
abstract class Pizza
{
public string? Name { get; set; }
public string? Dough { get; set; }
public string? Sauce { get; set; }
public List<string> Toppings { get; set; } = new List<string>();
public void Prepare()
{
Console.WriteLine($"{Name}を下準備");
Console.WriteLine($"{Dough} 生地をこねる");
Console.WriteLine($"{Sauce} ソースを追加");
Console.WriteLine("トッピングを追加");
foreach (var topping in Toppings)
{
Console.WriteLine($" {topping}");
}
}
public void Bake()
{
Console.WriteLine("180度で25 分焼く");
}
public virtual void Cut()
{
Console.WriteLine("ピザを扇型にカットする");
}
public void Box()
{
Console.WriteLine("PizaaStoreの箱にピザを入れる");
}
}
説明
ピザごとのトッピングをリストしておくプロパティになります
public List<string> Toppings { get; set; } = new List<string>();
Prepare(作る)作業のの詳細を記したメソッドになります
public void Prepare()
結果
ニューヨークスタイルのソース&チーズピザを下準備
薄いクラスト 生地をこねる
マリナラ ソースを追加
トッピングを追加
すりおろしたレッジャーのチーズ
180度で25 分焼く
ピザを扇型にカットする
PizaaStoreの箱にピザを入れる
イーサンの注文は、ニューヨークスタイルのソース&チーズピザ
シカゴスタイルのディッシュチーズピザを下準備
極厚クラスト 生地をこねる
プラムトマト ソースを追加
トッピングを追加
シュレッドモッツァレラチーズ
180度で25 分焼く
ピザを四角形にカットする
PizaaStoreの箱にピザを入れる
ジョエルの注文は、シカゴスタイルのディッシュチーズピザ
ディスカッション
コメント一覧
まだ、コメントがありません