2023-01-01から1年間の記事一覧
容器と中身の同一視。ファイルシステムでは、ディレクトリとファイルが入れ子になっている。ディレクトリとファイルは異なるものですが、「ディレクトリに入るもの」とみなしている。 Leaf(葉):MyFile中身Composite(複合体):MyDirectory容器Component:En…
状態を保存しておいて、復元できるようにしておく。undo,redo,history,snapshot 復元するためにインスタンスの内部情報を公開すると、カプセル化の破壊になるので、インタフェースを使い分ける。 Originator(作成者):Gamer自分の現在の状態を保存したいと…
アルゴリズムをごっそり切り替える Strategy(戦略):Strategyインタフェースを規定ConcreteStrategy(具体的戦略):WinningStrategy、ProbStrategyContext(文脈):PlayerStrategyを利用。ConcreteStrategyのインスタンスを保持。 Hand.php class Hand { co…
機能の階層と実装の階層を分ける 機能(メソッド)を追加したいとき、サブクラス(子クラス、派生クラス、拡張クラス)をつくるさらに機能を追加する場合、さらに階層が深くなる Something SomethingGood SomethingBetter 抽象クラスでインタフェース(API)…
抽象的な工場では、抽象的な部品を組み合わせて抽象的な製品をつくる具体的な実装には注目せず、インタフェースだけを使って、部品を組み立て、製品にまとめる 具体的な工場を新たに追加するのは簡単部品を新たに追加するのは困難(すべての具体的な工場に追…
スーパークラスで抽象メソッドの呼び出しの流れを定め、サブクラスで具体的な処理を実装ロジックが共通化できる AbstractDisplay.php abstract class AbstractDisplay { abstract function open(); abstract function print(); abstract function close(); f…