シェイプ クラス (Shape) がある場合、そのクラスは現在、Circle クラスと Square クラスの 2 つのサブクラスを拡張します。疑似コードは次のとおりです。
interface Shape { function fill (); } class circleShage implements Shape { public function fill () { echo '圆形' . PHP_EOL; } } class SquareShape implements Shape { public function fill () { echo '正方形' . PHP_EOL; } }
次に、図形に色 (赤、青) を追加します。では、どうすればよいでしょうか? 継承の考え方を使用する場合は、次のように 4 つのクラスを記述する必要があります:
class RedCircleShage implements Shape { public function fill () { echo '红色圆形' . PHP_EOL; } } class RedSquareShape implements Shape { public function fill () { echo '红色正方形' . PHP_EOL; } } class BlueCircleShage implements Shape { public function fill () { echo '蓝色圆形' . PHP_EOL; } } class BlueSquareShape implements Shape { public function fill () { echo '蓝色正方形' . PHP_EOL; } }
しかし、新しい形状、三角形、新しい色を追加したい場合は、 - 白だけでなく黒も。その場合、12 個のサブクラス (クラス爆発) が必要になりますが、それを解決する良い方法はありますか?
合成 (組み合わせ) と集約
上記の問題を解決する前に、合成と集計の意味を理解したいと思います。
合成と集約の原則: 合成/集約を使用し、継承は使用しないようにしてください。
総合(組み合わせ):全体と部分との関係(強い関係)を示し、人と心の関係のように同じライフサイクルを持っています。人の一部。
集約: 全体と部分の間の関係 (弱い関係) を表し、A オブジェクトには B オブジェクトを含めることができますが、B オブジェクトは A オブジェクトの一部ではないことを示します。たとえば、上で形状と色について説明しましたが、形状には色を含めることができますが、色は形状の一部ではありません。
ブリッジ モードは、アグリゲーションを使用してシステムを分離します。
ブリッジ パターン
定義: 抽象部分を実装から分離して、独立して変更できるようにします
上記の定義上の例を使用すると、システムには複数の角度分類 (色、形状) があり、各分類が変更される (新しい形状と色が追加される) 場合、システムの実装を複数から分離することができます。視点を減らし、それらの間の結合を減らします。
それでは、どうすればそれを達成できるのでしょうか?実装コードは次のとおりです:
abstract class FShape { protected $color = null; public function __construct(IColor $color) { $this->color = $color; } public function shape () { echo $this->color->color() . $this->setShape() . PHP_EOL; } protected abstract function setShape (); } class CircleShape extends FShape { protected function setShape () { return '圆形'; } } class SquareShape extends FShape { protected function setShape () { return '正方形'; } } interface IColor { public function color (); } class BlueColor implements IColor { public function color () { return '蓝色'; } } class RedColor implements IColor { public function color () { return '红色'; } }
テスト コードは次のとおりです:
$blueColor = new BlueColor(); $redColor = new RedColor(); $blueCircleShape = new CircleShape($blueColor); $redCircleShape = new CircleShape($redColor); $blueSquareShape = new SquareShape($blueColor); $redSquareShape = new SquareShape($redColor); $blueCircleShape->shape(); $redCircleShape->shape(); $blueSquareShape->shape(); $redSquareShape->shape();
ブリッジ モードを使用した後、コードは「開閉原則」に準拠します。または色が追加された場合は、新しいクラスを追加するだけです。前のクラスを変更する必要はありません。
# 学習に関する推奨事項:
##mysql ビデオ チュートリアル
以上がPHP 設計パターン: ブリッジ モードの学習体験 (ケース コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。