「増補改訂版Java言語で学ぶデザインパターン入門」読んだ
GoFが23種類まとめてカタログっぽくまとめた。それが『オブジェクト指向における再利用のためのデザインパターン』。邦訳は1999年。10年以上前なのか。
2011-03-30 00:57:26GoFは23個のパターンを、生成に関するパターン、構造に関するパターン、振る舞いに関するパターン で分類している。 本書では理解しやすい順に並んでいるっぽい。
2011-03-30 00:59:00本編に入る前に、以前まとめられていた Togetter - 「デザパタ140文字」 < http://togetter.com/li/15991 > を引用しておく。
2011-03-30 01:01:11第1章 iteratorパターン。配列のように何かがたくさん集まっているとき、それらを順番に読み取って処理を行うためのパターン。実装と切り離して数え上げができるという意味で forループより有利。
2011-03-30 01:05:08実装と切り離す、というのは オブジェクトを配列を使っていようと、Vectorを使っていようと、順番に読み取る部分の処理に変更を加えなくて済む。
2011-03-30 01:08:37第2章 adapter パターン。 既に提供されているクラスのパラメータをそのまま別のクラスで使えないとき、ラッパーを噛ますことで利用しやすくする。 クラスを使うパターン、インスタンスを使うパターンがある。 前者は継承、後者は移譲を使う。
2011-03-30 01:10:57第3章。Template methodパターン。スーパクラスで大体の処理の枠組みを定め、サブクラスで具体的な処理の内容を記述する。 サブクラスでの処理の流れを大枠でコントロールできる。
2011-03-30 01:16:40スーパクラスで処理の流れを記述してしまっているのでサブクラスでそれらを記述する必要がなくなる分有利。 スーパクラスの変数にサブクラスのどのインスタンスを代入しても正しく動作するように作れ・・・ ってこれLiskovの置換原則じゃん。昨日進研ゼミでならったところだ!
2011-03-30 01:19:50第4章 Factory method パターン。テンプレメソッドパターンに似てる。インスタンスの作り方はスーパクラスで定めるが具体的なクラス名までは定めない。 「どう」インスタンスを生成するかだけスーパクラスに書いて、「何を」はサブクラスに任す。
2011-03-30 01:25:53特定のインスタンスがたった1つしか作られないことを保証する。クラス変数として唯一のインスタンスを定義し、このクラスのコンストラクタはprivateにしておく。すると、このクラスのロード時に1個だけインスタンスが生成され、クラス外でインスタンス作ろうとしてもコンパイルエラーになる。
2011-03-30 01:31:05第6章。Prototypeパターン。すでにあるインスタンスをコピーしてインスタンスを作るパターン。 clone()って書いてある。 クローン作りたいインスタンスは clonableインタフェースを継承したものにする。
2011-03-30 01:38:58第7章 Builder パターン。複雑なインスタンスを作りたいとき、まず部分部分のパーツを作って、あとでガッチャンしよう、みたいなパターン。パーツとして何が必要か、どう結合するかを決めるクラスを作ろう。
2011-03-30 01:44:18Factory methodだと 工場で作る製品のパーツはこれとこれで、こう組み合わせよう みたいなのを抽象的に描いたけど、 その工場を抽象化しました みたいな感じっぽい。
2011-03-30 01:50:20