php设计模式之桥接模式

桥接模式

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

目录结构

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

代码实践

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

_car = $car;
    }
}

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

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

_car->run();
        echo '开在高速路上'.PHP_EOL;
    }
}

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

_car->run();
        echo '开在国道上'.PHP_EOL;
    }
}

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

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

自动加载类 Think/Loder.php

入口文件index.php

run();
//让家轿开在国道上
$nationalRoad = new \Think\nationalRoad(new \Think\homeCar());
$nationalRoad->run();

输出

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

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

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

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

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

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

你可能感兴趣的:(php设计模式之桥接模式)