シナリオ: アヒルのシミュレーション ゲームでは、さまざまな種類のアヒルが鳴いたり泳いだりできます。
予備的な設計計画を以下の UML クラス図に示します。
変更点: この初期段階は完璧に見えましたが、ある日ゲームでアヒルを飛ばす必要がありました。このとき、最も簡単な解決策はそれを追加することでした。親クラス A fly メソッドへの UML 図は次のとおりです:
ある日、災害が起こりました。ゲーム内でたくさんのゴム製のアヒルが飛び回っていました。 。 。 。
現時点での最も簡単な解決策は、RubberDuck クラスの fly メソッドを上書きすることです。クラス図は次のとおりです。
このメソッドでは、redheadduck、rubberduck、malardduck、decoyduck は、flyability クラスと quackability クラスの関連メソッドを使用して、それぞれ特定の fly メソッドと quack メソッドを実装する必要があります。このソリューションは、設計哲学における「特定の実装のためのプログラミングではなく、インターフェイスのためのプログラミング」という原則に違反しています。飛行可能性とクワック化可能性のクラスにさまざまなアヒルが必要とする機能が存在することを保証できません3。 . 具体的な実装は各種飛行スキルや呼び出しスキルによって完了します。 Uml クラス図は次のとおりです。
以上、デザインパターン入門 - 戦略パターン(php版)を様々な側面を含めて紹介しましたが、PHPチュートリアルに興味のある友人の参考になれば幸いです。