B-Teck!

お仕事からゲームまで幅広く

【デザインパターン】デザインパターンの勉強中メモ 振る舞いに関するパターン

Chain of Responsibility パターン

あるリクエストの処理を行うオブジェクトを鎖状に繋ぎ、適切なオブジェクトに処理させるパターン。
リクエストを受け渡す先を動的に切り替えることで、処理自体も動的に入れ替えることができる。
それぞれのオブジェクトは自分自身と、リクエストを受け渡す先のみを知っていれば良い為変更を行いやすいが、
全体を俯瞰することは難しくなる。

Command パターン

行いたい処理やパラメータ自体をオブジェクト内に隠蔽し、利用側が呼び出して処理を実行するパターン。
実際の処理はCommandオブジェクトごとに定義されているので、動的な変更や処理の切り替えに対応しやすい。

Interpreter パターン

Compositeパターンを文法や構文解析の結果の処理を目的として実装したもの
一つの文法規則を一つのクラスで表すことで、規則の追加や変更が簡単に行える。

Iterator パターン

集合に、要素に順番にアクセスできるようなインターフェースを持たせるパターン。
集合オブジェクト自身にインターフェースを持たせているので、
利用側はメソッドを呼び出すだけで内部の要素に順番にアクセスできる。

Mediator パターン

オブジェクト同士の相互作用を仲介するためのハンドリング用オブジェクトを用意するパターン。
各オブジェクトが直接相互作用を与えあう場合、影響のある箇所や全体像が把握しづらく、
拡張しづらいプログラムになってしまうので、それを避けるためのパターン。

Memento パターン

オブジェクトの内部状態を保存しておき、
必要に応じて書き戻すことで元の状態に戻すことができるようにするためのパターン。
単純にオブジェクトをcloneするのではなく、必要な状態やパラメータのみを保持する。

Observer パターン

オブジェクトの状態に変化があったときに、それを他のオブジェクトに通知するためのパターン。
パターン名は観察者という意味だが観察される側が通知を行うという事を定義している。

State パターン

オブジェクトの状態自体をオブジェクトとして切り出し、個々の状態の動作を別々に扱えるようにするパターン。
オブジェクトに状態オブジェクトを付与することで、現在の状態に応じた振る舞いをすることができる。
Strategyに類似しているが、Stateは状態に応じて振る舞いやアウトプットが変わるパターンである。

Strategy パターン

一連のアルゴリズムを実装したオブジェクトを複数用意しておき、
状況に応じてアルゴリズムを切り替えられるようにするパターン。
Stateに類似しているが、Strategyは同じふるまいをするときに、実際に行う処理を切り替えるパターンである。

Template Method パターン

全てのクラスに共通する処理を抽象クラスに実装し、変更可能性のあるメソッドをインターフェースとするパターン。
実装されたサブクラスによって行われる処理が切り替わる。

Visitor パターン

データ構造を保持するクラスと処理を行うクラスを分離するパターン。
データ構造側はどのような処理を行うかを知らなくても処理を実行することができる。
処理を行うクラスは、データ構造内の探索方法と処理自体を知っていれば処理を実行することができる。