美文网首页
php设计模式之桥接模式

php设计模式之桥接模式

作者: 小山人 | 来源:发表于2018-06-28 16:58 被阅读0次

桥接模式

把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。将抽象部分与实现部分分离,使它们都可以独立的变化。在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。实现系统可能有多个角度分类,每一种角度都可能变化。把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。

目录结构

|facade  #项目根目录
|--Think  #核心类库
|----main
|------road.php  #抽象公路角色
|------car.php  #抽象汽车接口
|----highSpeedRoad.php  #具体公路实现者 高速路
|----nationalRoad.php  #具体公路实现者 国道
|----sportsCar.php  #具体汽车车实现者 跑车
|----homeCar.php  #具体汽车实现者 家轿
|----Loder.php  #自动加载类
|--index.php #单一的入口文件

代码实践

抽象公路角色 Think/main/road.php

<?php
/**
 * 抽象公路角色
 */
namespace Think\main;

abstract class road{
    protected $_car;
    abstract function run();

    public function __construct(car $car) {
        $this->_car = $car;
    }
}

抽象汽车接口 Think/main/car.php

<?php
/**
 * 抽象汽车接口
 */
namespace Think\main;

interface car{
    function run();
}

具体公路实现者 高速路 Think/highSpeedRoad.php

<?php
/**
 * 具体公路实现者 高速路
 */
namespace Think;

use Think\main\road;

class highSpeedRoad extends road{
    public function run() {
        $this->_car->run();
        echo '开在高速路上'.PHP_EOL;
    }
}

具体公路实现者 国道 Think/nationalRoad.php

<?php
/**
 * 具体公路实现者 国道
 */
namespace Think;

use Think\main\road;

class nationalRoad extends road{
    public function run() {
        $this->_car->run();
        echo '开在国道上'.PHP_EOL;
    }
}

具体汽车车实现者 跑车 Think/sportsCar.php

<?php
/**
 * 具体汽车车实现者 跑车
 */
namespace Think;

use Think\main\car;

class sportsCar implements car{
    public function run() {
       echo "跑车";
    }
}

具体汽车实现者 家轿 Think/homeCar.php

<?php
/**
 *  具体汽车实现者 家轿
 */
namespace Think;

use Think\main\car;

class homeCar implements car{
    public function run() {
        echo '家轿';
    }
}

自动加载类 Think/Loder.php

<?php
namespace Think;

class Loder{
    static function autoload($class){
        require BASEDIR . '/' .str_replace('\\','/',$class) . '.php';
    }
}

入口文件index.php

<?php
define('BASEDIR',__DIR__);
include BASEDIR . '/Think/Loder.php';
spl_autoload_register('\\Think\\Loder::autoload');


//让跑车开在高速公路上
$highSpeedRoad = new \Think\highSpeedRoad(new \Think\sportsCar());
$highSpeedRoad->run();
//让家轿开在国道上
$nationalRoad = new \Think\nationalRoad(new \Think\homeCar());
$nationalRoad->run();

输出

跑车开在高速路上
家轿开在国道上

优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。

缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

使用场景: 1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。 2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。 3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

注意事项:对于两个独立变化的维度,使用桥接模式再适合不过了。

上一篇 php设计模式之外观模式
下一篇 未完待续......

相关文章

  • php设计模式之桥接模式

    桥接模式 把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • PHP设计模式-桥接模式

    适用性 基础的结构型设计模式:将抽象和实现解耦,对抽象的实现是实体行为对接口的实现。 例如:人 => 抽象为属性:...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 桥接模式

    设计模式:桥接模式(Bridge)

  • 设计模式之桥接模式

    设计模式之桥接模式 Intro 桥接模式(Bridge),将抽象部分与它的实现部分分离,使得它们都可以独立地变化。...

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 设计模式之桥接模式

    桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。优先使用对象的合成/聚合将有助于你...

  • 设计模式之桥接模式

    桥接模式:将抽象部分与他实现部分分离,使它们可以独立。 UML图: 使用场景:1、如果一个系统需要在构件的抽象化角...

网友评论

      本文标题:php设计模式之桥接模式

      本文链接:https://www.haomeiwen.com/subject/ntqnyftx.html