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();
将手机和手机的播放音乐,都分离开来.两者均可独立变化.