Factory
直訳すると「工場」
何かを生成するロジックを、利用側から切り離すための抽象のこと
以下のような課題を解決したいというモチベーション
生成が複雑
条件分岐がある
初期化手順が多い
依存関係が絡む
将来バリエーションが増えそう
利用者は「何が欲しいか」のみに言及し、「どうやって作るか」はFactory内に隠蔽する
例
プロモーションコードの有無によって「製品価格の取得処理」が変わるので、
プロモーションコードの有無を引数に取り、適切な取得処理(関数)を返すようなファクトリを作る
code:fs
type GetPricingFunction = PrigincMethod (これは値) -> GetProductPrice (これは関数)