SEノウハウ

【工事中】デザインパターン 自分の言葉でまとめる

工事中なのだ。

自分の言葉で表現できないデザパタは自分の血肉になっていないのだ。

 


 

Singleton

インスタンスが1つだけ存在することを保証するパターン。2つ作らせない。

  • static $singleton = nullプロパティ
  • public static getInstance()
  • __clone()の禁止

が特徴

設定、状態の1つを表す静的なクラスインスタンスに使える。

 

Template Method

抽象クラスを利用したポリモーフィズム。

 

Strategy

Interfaceで共通処理を定義して、異なる処理を行うクラスを作成する。

ifやSwitchで分岐させるのではなく、依存を利用して呼び出すクラスを変更していく。

 

Mediator

 

調停者。Collegueの中にMeditatorを持つのが特徴。

複数の飛行機と管制塔。

飛行機の中に管制塔を持たせる。管制塔のセッターで飛行機を入れる時に、飛行機に管制塔自身をプロパティに持たせる。

これで飛行機が管制塔の情報を正しく持つことができる。

 

Adapter

extends, implementsの両方利用することで、元のクラスをいじらないで拡張したクラス。

  • 石油自動車クラス
  • 電気自動車クラス

→Adapterで電気自動者クラス

 

 

Chain Of Responsibility

バリデーションで利用できる。

デフォルトのバリデーション、もう1つ追加するバリデーション。

バリデーションの種類を責任クラスとしてそれぞれ登録してContextに配列で保持しておく。

ループでバリデーションを複数実行していく。

 

Iterator

データベースのカラム追加などで、出力しなければいけないキーが増えたとする。

クラスに含まれる配列のプロパティを参照側で出力した時に、参照側でforeachでハードコーディングしていると、参照しているファイルが複数あった時に複数対応しなければいけなくなる。

→Iteratorの中でdumpしてその結果を参照側に渡すようにする。そうすればIteratorを操作するだけで参照側ファイルをいじらなくて済む。

 

Observer

メイン処理と共通のサブクラス処理群を分離させて実行させる。

Observerのコンクリートクラス複数を配列プロパティにInterfaceのSubjectクラスに登録しておく。Subjectクラスのアクションを実行する毎に、ObserverクラスがInterface Subjectクラス内のnotify()でforeachで実行されていく。

 

Command

Queueクラスが特徴。

  • QueueクラスをInvokerクラスとして持ち、Interface Commandを定義して複数のConcrete Commandを生成する。
  • QueueクラスにCommandインスタンスを$commandsプロパティで複数保持して、run()させる。
  • $commandsプロパティにはいくつもCommandクラスを持たせることができるので柔軟に実行できる。

 

Moment

MomentとなるSnapshotクラスを持つのが特徴。

Snapshotクラスにtakesnapshot()やrestoresnapshot()で元に戻すことができる。

 

State

ContextクラスにConcrete Stateクラスを保持する。

  • Concrete StateクラスはSingletonパターンで実装すること
    同じConcrete Stateクラスのインスタンスは静的な状態なので複数存在する必要がない。
  • Concrete Stateクラスはnext()で次に切り替えるConcrete Stateクラスをハードコーディングで持つこと

 

Flyweight

生成するインスタンスが静的なものの場合に取り回して利用する為のパターン。

  • Flyweight FactoryクラスはSingletonで作成
  • Flyweight FactoryでFlyweightクラスをaddFlyweight()する時に、同じ内容のFlyweightクラスインスタンスがないかチェックしてから、addする

 

Facade

たくさんのクラス部品で処理を構成している場合に、『窓口』 『正面玄関』 をFacadeクラスとして用意することでリモコンのようなことができる。

 

  • 車のディーラー = Facadeクラス
  • お客様 = Client

とする。

  • 客はディーラーを通して、エンジン、タイヤといったパーツを選んでいく。
  • 客はディーラーに注文合計を計算して貰う
  • 客はディーラーに発注をお願いする

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)