# 10. Design Pattern ________________________________________ Chapter 4. The Factory Pattern: Baking with OO Goodness (Head First Design Patterns chapter 4のエッセンス記事) https://www.oreilly.com/library/view/head-first-design/0596007124/ch04.html 増補改訂版Java言語で学ぶデザインパターン入門 https://www.hyuki.com/dp/ オブジェクト指向における再利用のためのデザインパターン 改訂版 19刷 https://www.sbcr.jp/products/4797311126.html 制御コンテナの反転と依存性注入パターン https://martinfowler.com/articles/injection.html Design Patterns 15 Years Later: An Interview with Erich Gamma, Richard Helm, and Ralph Johnson http://www.informit.com/articles/article.aspx?p=1404056 ________________________________________ ## 1. Gof 2009 + x ________________________________________ Premise ```text has-a over is-a ``` 初めてのFactoryパターンの前に ```text Simple Factory イディオム ``` 構造早見表 ```text A has B, B extends B2, B3, B4 ..., A call B's methods - Adapter - Bridge - Builder - Commannd - State - Strategy - Template method A has A - Composite - Decorator Extended A' has A - Proxy ``` Core ```text (Structural) Composite : 容器と中身の同一視 (Structural) Facade : シンプルな窓口 (Structural) Proxy : 必要になってから作る (Behavioral) Command : 命令をクラスにする (Behavioral) Iterator : 1つ1つ数え上げる (Behavioral) State : 状態をクラスとして表現する (Behavioral) Strategy : アルゴリズムをごっそり切り替える (Behavioral) Template method : 具体的な処理をサブクラスにまかせる ``` Creational ```text Builder : 複雑なインスタンスを組み立てる Dependency injection : 2009 version。インスタンスメンバ内ではnewしない Factory : インスタンス作成をサブクラスにまかせる Prototype : コピーしてインスタンスを作る ``` Peripheral ```text Abstract factory : 関連する部品を組み合わせて製品を作る Decorator : 飾り枠と中身の同一視 Extension object : 2009 version Mediator : 相手は相談役1人だけ Null object : 2009 version Type object : 2009 version Visitor : 構造を渡り歩きながら仕事をする ``` Other/Compound ```text Interpreter : 文法規則をクラスで表現する Flyweight : 同じものを共有して無駄をなくす ``` Uncategorized ```text (Structural) Adapter : 一皮かぶせて再利用 (Structural) Bridge : 機能の階層と実装の階層を分ける (Behavioral) Chain of responsibility : 責任のたらい回し (Behavioral) Memento : 状態を保存する (Behavioral) Observer : 状態の変化を通知する ``` Fire ```text (Creational) Singleton : たった1つのインスタンス ``` ________________________________________ ## 2. その他の構文パターン集 ________________________________________ イベントハンドラとその類似概念 ```text 関数ポインタ 高階関数 コールバック delegate イベントハンドラ アクションリスナ ラムダ式 匿名関数 匿名クラス Observer Rx ``` foreachの裏側 ```text Iterator Generator(yield return) ``` mixin ```text 拡張メソッド trait ``` 関数型言語由来 ```text カリー化 = メソッドチェーン + 拡張メソッド 無名関数 = クロージャ、キャプチャ、ラムダ式 ```