デザインパターンとは
オブジェクト指向においてクラスの再利用性を高めるための設計テンプレート
大きく分けて下の3パターン
- 生成
- 構造
- 振る舞い
生成 | 構造 | 振る舞い |
---|---|---|
Factory Method | Adaptor | Chain of Repository |
Abstract Factory | Bridge | Command |
Builder | Composite | Iterator |
Prototype | Decorator | Mediator |
Singleton | Facade | Memento |
Fliweight | Observer | |
Proxy | State | |
Strategy | ||
Template Method | ||
Visitor |
前提知識
生成
Factory Method
他のクラスのコンストラクタをサブクラスで上書き可能な自分のメソッドに置き換えることで、 アプリケーションに特化したオブジェクトの生成をサブクラスに追い出し、クラスの再利用性を高めることを目的とする。
概要
- まず、生成されるObjectの抽象クラスProductクラスを抽象化して定義する。
- 次に、それらのObjectを生成する Creatorクラスを実装する。
- ClientはCreatorを呼び出して実行する。
Abstract Factory
FactroyMethod集まりで出来た抽象クラス。
FactoryMethodで生成されるオブジェクト同士が密接に関係しあう時にその関係性を意識させることを強制することができる。
概要
- まず、生成されるObjectの抽象クラスProductクラスを抽象化して定義する。(例:Button, Window)
- 次に、それらのObjectを生成する Factoryクラスを同じく抽象クラスで定義する。
- 生成される環境や条件によってProductクラスとFactoryクラスを実装する。(例:WinButton, MacButton)
- ClientはAbstractFactoryを呼び出して実行する。
- 生成されるObject(Prodcut)にもinterfaceが必要
- Clientからは実際にはどのConcreteFacotoryが動いているのかは隠されている。
- Facotryの生成をApplicationの初期化の際に行い、環境情報などから factoryの型を決定する。
Builder
Prototype
Singleton
生成するインスタンスの数を1つに制限する。
newによるメモリの消費を抑えたり、プログラム中でインスタンスの状態を常に保持・更新する場合やクラス間で共通のデータとして常にアクセスする必要がある場合に使用する。
概要
- publicのコンストラクタを持たず、privateのコンストラクタを持つ。
- private変数として、自身のクラスインスタンスを持つ。
- public関数として、自身のクラスインスタンスを返すメソッドを持つ。
構造
Adaptor
Bridge
Composite
Decorator
Facade
振る舞い
Chain of Repository
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor
参考
https://refactoring.guru/ja/design-patterns/structural-patterns (理解)
https://www.techscore.com/tech/DesignPattern/ (実践)