デザインパターンまとめ
デザインパターンについて自分の解釈をまとめてみます
●Factory Method
【1】new処理を担当するクラスを作る。
一般的に、SimpleFactoryとかいわれるもの。
IDに該当するクラスをnewして返すようにする。
これを使うと、クラスの生成、破棄を処理を一箇所にまとめられる。
Stateパターンと組み合わせることで、状態遷移をエレガントに表現できる。
「ゲームプログラマになる前に覚えておきたい技術」のシーケンス遷移とかは
これで書き表すと綺麗になると思う。
【2】継承とポリモフィズムでnewするクラスを決める。
選択している工場にあわせた商品を作るのがミソ。
工場のほうで、Productの作成をインターフェース化しておいて、
作成するProductが分からなくても、作成出来るようにする。
画像を選択したときは、画像Factoryで画像用のメニューを作り
文字を選択したときは、文字Factoryで文字用のメニューを作るのに
使う感じか?使っていないのでなんとも。
継承によりTempleteMethodを使い
コードの段階でどのクラスが作られるかが決まる。
サブクラスが多くなるので注意。
Factoryの切り替えが可能な抽象的ファクトリー。
FactoryMethodパターンはインスタンス生成の抽象化を目的としているのに対し、
AbstructFactoryパターンはインスタンス群の生成APIの集約化を目的としている
●State
状態遷移をクラスで表現する。
SimpleFactoryとあわせて使うと便利。
こんな感じ
MainStateFactory = new StateFactory(); CurrentState = MainStateFactory.getState(StateFactory.MAIN_MENU); do{ //状態に合わせた行動を実施 NextState = CurrentState.action(); //状態の遷移があるかチェック if(NextState != CurrentState){ CurrentState = NextState; } //終了フラグがたっていない時 }while(CurrentState.getName().equals("End") == false);
●Builder
交換可能な作成者。
Director,Builderを分ける。
段階的にものを作る。>abstractFactoryは部品を作る。
オブジェクトの作成過程をBuilderに委譲する。
Builderは抽象クラスなので交換が可能。
BuilderはConstructとProductの変換を担当し、
カプセル化する。
●Prototype
抽象Productにコピー機能をつける。
最初の作成は具象Productの実態を作成し、その後は
具象Productのコピーにより新しい物体を作成する。
インスタンスのディープコピー処理。
C言語でいう値をコピーする(参照コピーではない)。
●Mememto
状態の保持
クラスの状態を保持するクラス。
ようはディープコピーのリスト?
Mememtoクラスは保存対象データを保持する。
また外部に対して保存、復帰を可能にするインターフェースを作る。
●Observer
いわゆるリスナ。addListener(hoge)
hogeがObserber。
SubjectにObserverを登録する。
Observerは複数でもよい。
SubjectがObserverに変更を通知する。
Observerは通知に伴って処理を実行する。
●Mediator
MediatorはObserverの制約があるものとも言える。
ColleagueにMediatorをセットする。
ColleagueがMediatorに変更を通知する。
Mediatorが変化に伴ないColleagueの状態をセットする。
●参考文献
1はGUI作る場合にはすごく参考になるし、デザインパターンを使う理由が細かく書かれているので
非常に参考になる。だが内容は難しいので時間が無い人にはおすすめできない。
2はとりあえず動くコードが例もわかりやすいのでイメージをつかみやすい。