デザインパターン

このサイトがよくまとまっている。
http://www.dmz.hitachi-sk.co.jp/Java/Tech/pattern/
http://www.hellohiro.com/pattern/


自分で普通に使っているのは
・Singleton - 皆普通に使う。
・Facade - 煩雑なのはまとめるよね。
・Flyweight - javaのStringとか、言語実装はこーなっているのでしょう。自作クラスの場合、コネクションプールとかか。
・Proxy - ライブラリの既存の動作が気に入らないときにラッパーかましたりしてた。デザパタだとこれがProxyパターンらしい。
・Command - URLパラメータなんかもコマンドと言える、かな?

ぐらい???うーん。


多分自作しないパターンはこの2つ
Iterator - SDKにバンドルされているからユーザとして使用。自分で作ったことはないが実装の仕方は理解している。
Interpreter - 自分で作ることはおそらくない。必要ならJPython入れるよ。



今いち理解が足りない==区別がついてない、あるいは
使いどころを考えあぐねる?パターンたち


ツリー構造を使用するもん。
・Composite - DOMのインターフェースがコレ。
・Visitor - わかりづらいっちゅーの。


処理を切り替えるもの
・Stateパターン
・Strategy - zipクラスとlzhクラス、あるいはEUCクラスとJISクラス、というものを作るときなんかに使えそうだ。ってか使うわきっと。
まあ、理解できるかな。


・Chain Of Responsibility - 昔これやって、チェーンのオブジェクトすべてに同じメソッドを定義するのがとにかく面倒だった。


・Memento - UNDO処理することないねぇ。
・Observer - 監視といいつつ、被観察者が看視者に通知にいくという実装。JDKのObserverをうまく使えなかったのが悔しい、という経験あり。


インターフェースを切る、だけではないんだよなぁ。こいつら。
・Template Method - フレームワーク系ってこれだよね。フレームワーク側で呼び出すメソッドを実装者が定義していく。
・Mediator - 管理対象がいっぱいあって、それぞれがマネージャー経由で通信するもの。オレこれ昔つくったわ。
・Decorator - サブクラス化したらややこしくなるときに使用している。
・Adapter - APIの型合わせしたいときには使う。
・Factory Method - getInstanceするようなものはコイツか?JDBCドライバを、クラス名で指定して取得後、JDBCインターフェースで使用するときはこのパターンの利用者になっているのかな。


Factory Method と Abstract Factory は設計段階であんまり区別していない
ケースが多いんではなかろうか。Builderもそうだ。
ってか自分が区別していないのか・・・。ダメじゃん。


・Abstract Factoryパターン
・Builder - Directorがどれ作るのか選ぶパターン


・Prototypeパターン

一応、GOF結城浩の本も持っているが全部読んでいないのだ。
もったいないので全部読むか。