定义
桥接模式(Bridge Pattern)使抽象层和实现层解耦,使二者可以独立变化,属于结构型模式。
代码实例
现有文件IDE Phpstorm 和 Notepad ,每一种文件类和IDE的组合都是一种维度,比如 Phpstorm 和 php, Phpstorm 和 JS,IDE 可以扩展,要处理的自定义文件类型也会很多,如果采用抽象层定义每一种维度,无疑是工作量巨大的,并且业务发展变化时,扩展和修改是很麻烦的的,我们将 IDE 的实现和文件类的实现单独分开实现,在具体使用时根据业务调用不同的维度组合。
<?php
interface AdvancedIde
{
public function handleFile($file);
}
class Phpstorm implements AdvancedIde
{
public function handleFile($file)
{
echo '通过phpstorm处理'. $file .'文件';
}
}
class Notepad implements AdvancedIde
{
public function handleFile($file)
{
echo '通过notepad处理'. $file .'文件';
}
}
abstract class File
{
public $ide;
protected $file;
public function chooseIde($ide)
{
$this->ide = new $ide;
return $this->ide;
}
abstract public function handle($ide,$file);
}
class CustomFile extends File
{
public function handle($ide,$file)
{
$ideModel = $this->chooseIde($ide);
$ideModel->handleFile($file);
}
}
$bridgeDemo = new CustomFile();
$bridgeDemo->handle('Phpstorm','php');
$bridgeDemo->handle('Phpstorm','js');
$bridgeDemo->handle('Notepad','php');
$bridgeDemo->handle('Notepad','js');
总结
桥接模式实现了抽象和实现的解耦,可以很方便的构建对象的不同维度,桥接对系统扩展非常友好,但架构时需要在抽象层进行设计,增加了系统的复杂度。
网友评论