ホームページ  >  記事  >  バックエンド開発  >  PHP 設計パターン: ブリッジ モードの学習体験 (ケース コード付き)

PHP 設計パターン: ブリッジ モードの学習体験 (ケース コード付き)

齐天大圣
齐天大圣オリジナル
2020-08-03 16:54:452064ブラウズ

シェイプ クラス (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();

ブリッジ モードを使用した後、コードは「開閉原則」に準拠します。または色が追加された場合は、新しいクラスを追加するだけです。前のクラスを変更する必要はありません。

# 学習に関する推奨事項:

#php ビデオ チュートリアル

##mysql ビデオ チュートリアル


以上がPHP 設計パターン: ブリッジ モードの学習体験 (ケース コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。