LoginSignup
4

More than 3 years have passed since last update.

デザインパターンについてまとめた

Last updated at Posted at 2019-05-06

デザインパターンについて勉強しようと思い、自分の言葉でまとめました!
何かおかしいところなどありましたらコメントお願いします!

パターン名 種別 実装 使うのは 概要
Adapter 構造 普通 簡単 Adapter(適合)パターン。元となるクラスに手を加えずにインターフェースを変更するパターン。実装方法は継承と移譲の2パターンある。
Bridge 構造 簡単 簡単 Bridge(橋)パターン。DIによって継承の階層を減らすパターン。継承を正しく使おうとすればこのパターンに行き着く気がする。
Composite 構造 簡単 簡単 Composite(複合)パターン。木構造を伴う再帰的なデータ構造を実装する際に用いるパターン。Componentインターフェース、Leafクラス、Compositeクラスを作成する。入れ子集合モデルの実装を実装したものに当たる(はず)。
Decorator 構造 簡単 簡単 Decorator(装飾者)パターン。既存クラスの振る舞いを変更せずに拡張(Decorate)するパターン。拡張したいクラスをDIする。
Facade 構造 簡単 簡単 Facade(建物の正面)パターン。シンプルなインタフェースを定義することで複雑な処理を利用しやすくするパターン。Railsのserviceクラスはこのパターンを用いることが多い。
Flyweight 構造 普通 難しい Flyweight(フライ級)パターン。生成したオブジェクトを再利用するパターン。インスタンス生成に時間がかかる場合、メモリを節約したい場合に有効。生成したオブジェクトの状態が変わってしまうと再利用できないため、適用できるのはイミュータブルなオブジェクトに限られる。
Proxy 構造 簡単 簡単 Proxy(代理人)パターン。「そのクラス」の代わりに処理を受け持つクラス(Proxy)を作成するパターン。Proxyでまかないきれない場合に、「そのクラス」のインスタンスを生成して処理を委任する。
Chain of Responsibility 振る舞い 普通 普通 Chain of Responsibility(責任の連鎖)パターン。自身が処理を実行できない時に次のオブジェクトに処理の実行を任せるパターン。どこまで責任を連鎖させるかはあらかじめ定義しておく。
Command 振る舞い 難しい 難しい Command(命令)パターン。Commandオブジェクトによって処理をカプセル化し、Invoker(起動者)からCommandsを実行するパターン。クライアント(利用者)はInvokerに実行の依頼をするだけでよいので、実際の処理(Command)を柔軟に変更することができる。
Interpreter 振る舞い 難しい 簡単 Interpreter(通訳)パターン。なんらかのフォーマットに基づいて記述された文を解釈するパターン。たぶん、DSLの実装はこれ。
Iterator 振る舞い 難しい 簡単 Iterator(反復)パターン。配列など要素の集合に対して繰り返し処理を行うパターン。要素の集合に対して順番に処理を行うので、要素の大きさがわからなくても処理を実行(実装)することができる。
Mediator 振る舞い 普通 普通 Mediator(仲裁人)パターン。複数のクラスが相互の参照し合う時にその仲介(Mediator)を作成するパターン。Facadeは一方的に利用するのに対して、Mediatorは相互に参照し合う点が異なる。
Memento 振る舞い 普通 普通 Memento(形見)パターン。その時のインスタンスの状態を保存しておいて、後から利用できるようにするパターン。Originator(作成者)がMemento(形見)を作成し、Caretaker(世話人)がMementoのリストを保持する。
Observer 振る舞い 普通 普通 Observer(観察者)パターン。通知者となるオブジェクトが発信する通知を受けて観察者(Observer)が処理を行うパターン。通知者オブジェクトに観察者オブジェクトを設定(複数可)する。通知者と観察者はお互いにインターフェースを通じてやりとりするため、具体的な実装を意識しなくてよくなる。
State 振る舞い 簡単 普通 State(状態)パターン。インスタンスが状態を持つ場合に状態による振る舞いの違いを状態インスタンスに移譲するパターン。状態による振る舞いの違いを移譲するので、条件分岐を減らすことができる。
Strategy 振る舞い 簡単 簡単 Strategy(戦略)パターン。ロジックをコンテキストによって切り替えたい時に用いるパターン。クラス図はBridgeパターンと同様だが、その目的が異なる。Bridgeパターンは構造に関するパターンで、Strategyパターンは振る舞いに関するパターン。
TemplateMethod 振る舞い 簡単 簡単 Template(ひな型)Methodパターン。スーパークラスでテンプレートとなるメソッドを定義し、サブクラスで処理の詳細を実装するパターン。
Visitor 振る舞い 普通 難しい Visitor (訪問者)パターン。構造と処理を分離するパターン。構造(Acceptor)が処理(Visitor)を呼び出し、Visitorが構造に依存した処理を実行する。
AbstractFactory 生成 普通 難しい 複数オブジェクトを生成する際、生成するオブジェクトに複数の組み合わせが存在する場合、その組み合わせをを抽象化して利用しやすくするパターン。FactoryMethodを複数の関連するオブジェクトに適用するようなイメージ。
Builder 生成 普通 難しい オブジェクトの生成過程を抽象化するパターン。インスタンス生成の引数が動的に変わる場合に有効。実装方法はいくつかある。①DI + TemplateMethod ②メソッドチェイン
FactoryMethod 生成 普通 難しい Factory(工場)Methodパターン。インスタンス生成をFactoryクラスに行わせるパターン。これにより抽象クラスを抽象クラスのまま扱えるので、抽象クラスを具象クラスにする必要がなくなる。
Prototype 生成 普通 簡単 Prototype(原型)パターン。プロトタイプとなるインスタンスを流用するパターン。インスタンス生成を挟まないことでインスタンスが持つ状態をコピーして使うことができる。
Singleton 生成 簡単 難しい 生成できるインスタンスの数を1つに制限するパターン。

参考にしたサイト

「Googleで検索して1ページ目に表示された結果を全部読む」という方法で勉強したのですが、IT専科さんの解説がとても参考になりました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4