7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

デザインパターンについて

Last updated at Posted at 2019-12-19

デザインパターン概要
基本原則:
❶変わるものを変わらないものから分離
❷プログラムはインターフェイスに対して行う
❸継承より集約
❹委譲、委譲、委譲
❺必要になるまで作るな(YAGNI)

その後の変更や追加、修正が容易、安全、迅速に行えるように設計すること。

●TemplateMethodパターン
変わるものを、変わらないものから分離するため、
抽象基底クラスを抽出し、基底クラスのメソッドを、サブクラスでオーバーライドさせる方法。
動作は同じだが、種類が違うものに応用できる。abcモジュールで実装可能。
例:種類の違うファイルの出力形式を合わせる。
デメリット:サブクラスが基底クラスに依存してしまう。

●Strategyパターン
strategy(変化する部分、行動、アルゴリズム)を関数として抽出し、基底クラスから呼び出すという形。
TemplateMethodパターンでは種類を分離したが、strategyでは種類と行動を分離する。
これにより、承継による依存度が薄くなる。

●Observerパターン
何かが変更になった際に、オブザーバーに通知する際のデザイン。
変更になった時だけでなく、変更が間違っていた時には通知しない実装も必要。
例:FXでティックが変更になった際に、チャートが更新される仕組み。

●Compositeパターン
複合物、容器と中身を同一視するパターン。
例:ファイル管理
ファイルやディレクトリは同じ、削除メソッドを持っている。
削除メソッド抽出して、新しくシンボリックリンクを追加できるようにする。

●Iteratorパターン
Pythonで言うところのリスト。イテレータ。リスト状に格納して、順番に取り出すことができる。

●Commandパターン
ボタンとボタンが押された時の動作を分離させる。

●Adapterパターン
継承と委譲の2パターンがあり、二つのクラスやインターフェイスの間に入って、二つの機能をつなぐ。

●Proxyパターン
本体とは別に、本体と同じ機能を備えたクラスを作成する。

●Decoratorパターン
アイスクリームのトッピングのように何重にも動作を付け加えていく。

●Singletonパターン
唯一のインスタンスになるデザイン。

●FactoryMethodパターン
Creatorと呼ばれる実行クラスと、concrete creatorと呼ばれる種類を変えるクラスでできている。
Creatorクラスを、concreatorクラスに承継させることで、種類の違う動作をさせる点は、
templatemethodパターンの一種である。
また、承継させるだけでなく、引数としてクラスを呼び出すことで、さらに対応範囲が広がる。

●AbustructFactoryパターン
Factorymethodパターンから、動作の部分を分離させ、種類ごとにクラスわけすることで、
メインクラスから、各種類のクラスを呼び出せるようにした。
Strategyパターンの一種。

●Builderパターン
作業工程をクラスや多くの引数を使って、一気に動作させるのではなく、
クラス内に分離したメソッドに分けて、一つ一つ指示しながら、完成させていくパターン
例:部品が多いオーダーメイドなPCの組み立てなど

●Interpriterパターン
抽象構文木を使うパターン。行動と要素を分類して、順次実行していく。

●Prototypeパターン
型を作って、同じものを量産していく。

●Bridgeパターン
同じ機能を必要としているクラスに対して、機能を重複して足すのではなく、
機能と実装を分離させる。

●Visitorパターン
処理をオブジェクトに任せて、そのオブジェクトを呼び出す。

●Chain of Responsibilityパターン
処理できるものに処理を任せるパターン

●Facadeパターン
多くのクラスが作られる大規模アプリケーションなどで、それらのクラスを統制するクラスを
玄関として作り、そこから各クラスを操作するパターン。

●Mediatorパターン
多くのオブジェクトが複雑に関係している場合に、間に入って、上手いことするやつ。

●Mementoパターン
処理手順のある段階の状態(インスタンス)を記録しておき、
そこに戻ったり、そこから次の処理を開始したりする。

●Stateパターン
状態によって、振る舞いが変化するクラス。
ifを使った場合わけではなく、場合わけをクラスによって行う。

●Flyweightパターン
以前実行して取得したインスタンスを使い回す。

7
11
0

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
7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?