forget for get

覚えるために忘れる

PHPで学ぶデザインパターン入門

Compositeパターン

容器と中身の同一視。ファイルシステムでは、ディレクトリとファイルが入れ子になっている。ディレクトリとファイルは異なるものですが、「ディレクトリに入るもの」とみなしている。 Leaf(葉):MyFile中身Composite(複合体):MyDirectory容器Component:En…

Mementoパターン

状態を保存しておいて、復元できるようにしておく。undo,redo,history,snapshot 復元するためにインスタンスの内部情報を公開すると、カプセル化の破壊になるので、インタフェースを使い分ける。 Originator(作成者):Gamer自分の現在の状態を保存したいと…

Strategyパターン

アルゴリズムをごっそり切り替える Strategy(戦略):Strategyインタフェースを規定ConcreteStrategy(具体的戦略):WinningStrategy、ProbStrategyContext(文脈):PlayerStrategyを利用。ConcreteStrategyのインスタンスを保持。 Hand.php class Hand { co…

Bridgeパターン

機能の階層と実装の階層を分ける 機能(メソッド)を追加したいとき、サブクラス(子クラス、派生クラス、拡張クラス)をつくるさらに機能を追加する場合、さらに階層が深くなる Something SomethingGood SomethingBetter 抽象クラスでインタフェース(API)…

Abstract Factoryパターン

抽象的な工場では、抽象的な部品を組み合わせて抽象的な製品をつくる具体的な実装には注目せず、インタフェースだけを使って、部品を組み立て、製品にまとめる 具体的な工場を新たに追加するのは簡単部品を新たに追加するのは困難(すべての具体的な工場に追…

Template Methodパターン

スーパークラスで抽象メソッドの呼び出しの流れを定め、サブクラスで具体的な処理を実装ロジックが共通化できる AbstractDisplay.php abstract class AbstractDisplay { abstract function open(); abstract function print(); abstract function close(); f…

Observerパターン

観察対象の状態が変化すると、通知する Subject(被験者):NumberGenerator Observerを登録・削除するメソッド、現在の状態を取得するメソッドをもつ具体的なSubject:RandomNumberGenerator 状態が変化したらObserverに伝えるObserver(観察者):Observer…

Builderパターン

Builderパターン 複雑なインスタンスを構築する。 Builderクラスが構築のためのメソッドを定義。 Directorクラスがそのメソッドを使ってインスタンスを構築する。 具体的な処理はBuilderクラスのサブクラスが決める。 DirectorはBuilderのメソッドのみを使う…

Factory Methodパターン

Factory Methodパターン インスタンスの作り方をスーパークラス側で定める。具体的な肉付けはサブクラス側で行う。 Product.php abstract class Product { abstract public function use(): void; } Factory.php abstract class Factory { final public func…