CleverCode最近在看桥接模式,发现桥接模式的应用场景真的是非常多。
1 模式介绍
桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。
2 模式组成
参与者
Abstraction
1. 定义抽象接口。
2. 拥有一个Implementor类型对象引用。
RefinedAbstraction
1. 扩展Abstraction中的接口定义。
Implementor
1. Implementor是具体实现的接口,Implementor和Abstraction接口并不一定完全一致(注:Proxy和ISubject接口一一对应),实际上这两个接口可以完全不一样,Implementor提供具体操作方法,而Abstraction提供更高层次的调用。
ConcreteImplementor
1. 实现Implementor接口,给出具体实现。
3 架构说明
4 项目应用
4.1 需求说明
4.2 架构设计
4.3 php源码设计
<?php
/**
* bridge.php
*
* 桥接模式
*
* Copy right (c) 2016 http://blog.csdn.net/CleverCode
*
* modification history:
* --------------------
* 2016/9/11, by CleverCode, Create
*
*/
interface ICar
{
public function run();
}
class HongQiCar implements ICar
{
private $_name = 'hong qi';
public function run()
{
echo "{$this->_name} is run\r\n";
}
}
class QQCar implements ICar
{
private $_name = 'qq';
public function run()
{
echo "{$this->_name} is run\r\n";
}
}
class LuHuCar implements ICar
{
private $_name = 'lu hu';
public function run()
{
echo "{$this->_name} is run\r\n";
}
}
abstract class Person
{
public $car;
public function setCar(ICar $car)
{
$this->car = $car;
}
abstract protected function driveCar();
}
class Woman extends Person
{
public $car;
public function driveCar()
{
echo "\r\nWoman drive Car:\r\n";
$this->car->run();
}
}
class Man extends Person
{
public $car;
public function driveCar()
{
echo "\r\nMan drive Car:\r\n";
$this->car->run();
}
}
function start()
{
$hongQiCar = new HongQiCar();
$qqCar = new QQCar();
$luHuCar = new LuHuCar();
$man = new Man();
$man->setCar($hongQiCar);
$man->driveCar();
$man->setCar($luHuCar);
$man->driveCar();
$woman = new Woman();
$woman->setCar($qqCar);
$woman->driveCar();
$woman->setCar($hongQiCar);
$woman->driveCar();
}
start();
?>
4.4 展示结果
4.5 总结
技术交流
CleverCode是一名架构师,技术交流,咨询问题,请加CleverCode创建的qq群(架构师俱乐部):517133582。加群和腾讯,阿里,百度,新浪等公司的架构师交流。【架构师俱乐部】宗旨:帮助你成长为架构师!