デザインパターンまとめ

デザインパターンについて自分の解釈をまとめてみます

●Factory Method
【1】new処理を担当するクラスを作る。
一般的に、SimpleFactoryとかいわれるもの。
IDに該当するクラスをnewして返すようにする。


これを使うと、クラスの生成、破棄を処理を一箇所にまとめられる。
Stateパターンと組み合わせることで、状態遷移をエレガントに表現できる。



ゲームプログラマになる前に覚えておきたい技術」のシーケンス遷移とかは
これで書き表すと綺麗になると思う。



【2】継承とポリモフィズムでnewするクラスを決める。
選択している工場にあわせた商品を作るのがミソ。



工場のほうで、Productの作成をインターフェース化しておいて、
作成するProductが分からなくても、作成出来るようにする。


画像を選択したときは、画像Factoryで画像用のメニューを作り
文字を選択したときは、文字Factoryで文字用のメニューを作るのに
使う感じか?使っていないのでなんとも。



継承によりTempleteMethodを使い
コードの段階でどのクラスが作られるかが決まる。
サブクラスが多くなるので注意。


AbstractFactory

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. オブジェクト指向における再利用のためのデザインパターン
  2. Java言語で学ぶデザインパターン入門

1はGUI作る場合にはすごく参考になるし、デザインパターンを使う理由が細かく書かれているので
非常に参考になる。だが内容は難しいので時間が無い人にはおすすめできない。

2はとりあえず動くコードが例もわかりやすいのでイメージをつかみやすい。