23种设计模式-桥接模式
概念
桥接模式是指将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现。从而降低了抽象和实现这两个可变维度的耦合度
结构
桥接模式包含一下主要角色:
- 抽象化角色:定义抽象类,并包含一个对实现化对象的引用
- 扩展抽象化角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法
- 实现化角色:定义实现化角色的接口,供扩展抽象化角色调用
- 具体实现化角色:给出实现化角色接口的具体实现
实现
/**
* 软件接口
* 实现化角色
*/
interface Software
{
public function work();
}
/**
* 谷歌浏览器
* 具体实现化角色
*/
class Google implements Software
{
public function work()
{
echo '谷歌浏览器 ';
}
}
/**
* 火狐浏览器
* 具体实现化角色
*/
class Firefox implements Software
{
public function work()
{
echo '火狐浏览器';
}
}
/**
* 抽象化角色
*/
abstract class System
{
public function __construct(public Software $software)
{
}
abstract public function run();
}
/**
* Mac系统
* 扩展抽象化角色
*/
class Mac extends System
{
public function run()
{
echo "mac".$this->software->work();
}
}
/**
* Window系统
* 扩展抽象化角色
*/
class Windows extends System
{
public function run()
{
echo "windows".$this->software->work();
}
}
$mac = new Mac(new Google());
$mac->run(); // mac 谷歌浏览器