概要
設計力に関しては経験によるところが大きいので、実践+コードレビューでまかなえるところが大きいが、ある程度網羅的でやった感の出るものとしてデザインパターンを使って学習する。
-
デザインパターン自体は、C++/Java用だったりして古いので、そのパターンが必要な背景を元に、Ruby(/ObjectiveC)で書き直してそれを使うべきか自分たちで再評価する。
-
またRuby, Railsその他有名なライブラリでそのパターンが使われている部分を探す。
実際に本を読んだりネット上を調べる際の、具体的なチェックポイントとしては、以下の5つを用いる。
- どういう時に使うか
- メリット (+ デメリット)
- そのパターンを使わないとどうなるか
- Rubyではどう書くか(同じものがある/似たものがある/必要ない)
- Ruby/Rails/Gemで実際に使われている場面
実践
学習するたびに、以下のJava言語で学ぶデザインパターン入門の目次にリンクを足していく。
やる順番としては基本的には本の掲載順にやる予定。
デザインパターンに慣れる
- 第1章 Iterator ― 1つ1つ数え上げる
- 第2章 Adapter ― 一皮かぶせて再利用
サブクラスにまかせる
- 第3章 Template Method ― 具体的な処理をサブクラスにまかせる
- 第4章 FactoryMethod ― インスタンス作成をサブクラスにまかせる
インスタンスを作る
- 第5章 Singleton ― たった1つのインスタンス
- 第6章 Prototype ― コピーしてインスタンスを作る
- 第7章 Builder ― 複雑なインスタンスを組み立てる
- 第8章 Abstract Factory ― 関連する部品を組み合わせて製品を作る
分けて考える
- 第9章 Bridge ― 機能の階層と実装の階層を分ける
- 第10章 Strategy ― アルゴリズムをごっそり切り替える
同一視
- 第11章 Composite ― 容器と中身の同一視
- 第12章 Decorator-飾り枠と中身の同一視
構造を渡り歩く
- 第13章 Visitor ― 構造を渡り歩きながら仕事をする
- 第14章 Chain of Responsibility ― 責任のたらい回し
シンプルにする
- 第15章 Facade ― シンプルな窓口
- 第16章 Mediator ― 相手は相談役1人だけ
状態を管理する
- 第17章 Observer ― 状態の変化を通知する
- 第18章 Memento ― 状態を保存する
- 第19章 State ― 状態をクラスとして表現する
無駄をなくす
- 第20章 Flyweight ― 同じものを共有して無駄をなくす
- 第21章 Proxy ― 必要になってから作る
クラスで表現する
- 第22章 Command ― 命令をクラスにする
- 第23章 Interpreter ― 文法規則をクラスで表現する