S5:桥接模式 Bridge

将抽象的部分与实现的部分分离,使它们都可以独立变化.
抽象与实现的分离,指的是抽象类和派生类用来实现自己的对象.实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来,让他们独立变化,减少他们之间的耦合.

合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承.
聚合是一种弱拥有关系,A对象可以包含B对象,但B对象不是A对象的一部分.
合成是一种强拥有关系,体现了严格的部分整体关系,部分和整体生命周期一致.

UML:

示例代码:

abstract class Phone
{
    protected $audio;

    public function __construct(Audio $audio)
    {
        $this->audio = $audio;
    }

    abstract public function output();
}

class Iphone extends Phone
{
    public function output()
    {
        $this->audio->play();
    }

}

abstract class Audio
{
    abstract public function play();
}

class HiFi extends Audio
{
    public function play()
    {
        echo "HIFI play";
    }

}

$phone = new Iphone(new HiFi());
$phone->output();

  

将手机和手机的播放音乐,都分离开来.两者均可独立变化.

原文地址:https://www.cnblogs.com/itfenqing/p/7787967.html