振る舞いに関するデザインパターン
振る舞いに関するデザインパターンは、 アルゴリズムやオブジェクト間の責任の分担に関するものです。
![Chain of Responsibility](/images/patterns/cards/chain-of-responsibility-mini.png?id=36d85eba8d14986f053123de17aac7a7)
ハンドラーの連鎖に沿ってリクエストを渡すことができます。 各ハンドラーは、 リクエストを受け取ると、 リクエストを処理するか、 連鎖内の次のハンドラーに渡すかを決めます。
![Command](/images/patterns/cards/command-mini.png?id=b149eda017c0583c1e92343b83cfb1eb)
リクエストを、 それに関するすべての情報を含む独立したオブジェクトに転換します。 この転換により、 リクエストをメソッドの引数として渡したり、 リクエストの実行を遅らせたり、 待ち行列に入れたり、 取り消し操作を行なうことが可能になります。
![Iterator](/images/patterns/cards/iterator-mini.png?id=76c28bb48f997b36965983dd2b41f02e)
リスト、 スタック、 ツリーなどの実際のデータ表現を表に出さずにコレクションの要素を探索することができます。
![Mediator](/images/patterns/cards/mediator-mini.png?id=a7e43ee8e17e4474737b1fcb3201d7ba)
オブジェクト間の混沌とした依存性を削減します。 パターンは、 オブジェクト間の直接の通信を制限し、 メディエーター・オブジェクトを介してのみの共同作業を強制します。
![Memento](/images/patterns/cards/memento-mini.png?id=8b2ea4dc2c5d15775a654808cc9de099)
オブジェクトの以前の状態を保存し復元することを、 実装の詳細を明かさずに行います。
![Observer](/images/patterns/cards/observer-mini.png?id=fd2081ab1cff29c60b499bcf6a62786a)
複数のオブジェクトが観察しているオブジェクトに何かイベントが発生した時にそのイベントについて観察しているオブジェクトへ通知を行うサブスクリプションの仕組みを定義することができます。
![State](/images/patterns/cards/state-mini.png?id=f4018837e0641d1dade756b6678fd4ee)
オブジェクトの内部状態が変化した時に、 その挙動を変化させます。 それは、 あたかもそのオブジェクトのクラスが変わったかのように見えます。
![Strategy](/images/patterns/cards/strategy-mini.png?id=d38abee4fb6f2aed909d262bdadca936)
アルゴリズムのファミリーを定義し、 それぞれのアルゴリズムを別個のクラスとし、 それらのオブジェクトを交換可能にします。
![Template Method](/images/patterns/cards/template-method-mini.png?id=9f200248d88026d8e79d0f3dae411ab4)
スーパークラス内でアルゴリズムの骨格を定義しておき、 サブクラスは構造を変えることなくアルゴリズムの特定のステップを上書きします。
![Visitor](/images/patterns/cards/visitor-mini.png?id=854a35a62963bec1d75eab996918989b)
アルゴリズムをその動作対象となるオブジェクトから切り離します。