博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
桥接模式
阅读量:3941 次
发布时间:2019-05-24

本文共 1411 字,大约阅读时间需要 4 分钟。

桥接模式:将抽象的部分于他的实现部分分离,使他们都可以独立地变化

什么叫抽象与他的实现分离,这并不是说让抽象类与派生类分离,因为这没有任何意义,实现指的是抽象类和他的派生类用来实现自己的对象。

在这里插入图片描述

实现系统可能有多角度分类,每一种分类都有可能变化,那么结巴多角度分离出来让他们独立变化,减少他们之间的耦合。

桥接模式的优点:

  1. 分离抽象接口及其实现部分。提高了比继承更好的解决方案。

  2. 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。

  3. 实现细节对客户透明,可以对用户隐藏实现细节。

缺点:

  1. 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
  2. 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

桥接模式的使用场景:

  1. 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

  2. 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

  3. 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

代码实现

#include 
using namespace std;/*手机品牌手机软件*/class Sorftware{
public: virtual void run() = 0;};class Game:public Sorftware{
public: void run() {
cout << "运行手机游戏" << endl; }};class AddressList:public Sorftware{
public: void run() {
cout << "运行手机备忘录" << endl; }};class Brand{
public: void downLoadSorftware(Sorftware *s) {
sorftware = s; } virtual void Run() {
}protected: Sorftware *sorftware;};class BrandM : public Brand{
public: void Run() {
sorftware->run(); }};//N品牌class BrandN : public Brand{
public: void Run() {
sorftware->run(); }};int main(){
Sorftware *s1 = new Game(); Sorftware *s2 = new AddressList(); Brand *m = new BrandM(); Brand *n = new BrandN(); m->downLoadSorftware(s1); m->Run(); m->downLoadSorftware(s2); m->Run(); n->downLoadSorftware(s1); n->Run(); n->downLoadSorftware(s2); n->Run(); return 0;}

参考《大话设计模式》

转载地址:http://kanwi.baihongyu.com/

你可能感兴趣的文章
慎用PHP$_REQUEST数组
查看>>
详细解释PHP中header
查看>>
php中的迭代器Iterator的具体用法
查看>>
mysql操作技巧随笔--链表删除数据
查看>>
MySql在建立索引优化时需要…
查看>>
Mysql建表和索引使用规范
查看>>
mysql&nbsp;队列&nbsp;实现并发读
查看>>
MYSQL千万级数据量的优化方法积累
查看>>
经典分享MySQL的limit查询优化
查看>>
各大浏览器兼容性报告
查看>>
统计每个ip的访问量--linux--acces…
查看>>
常见hash算法的原理
查看>>
localForage——轻松实现&nbsp;Web&amp;n…
查看>>
yaf使用小记
查看>>
document.domain&nbsp;跨域问题
查看>>
window安装PHP的redis扩展
查看>>
给网站选择一个好的jquery库远程调…
查看>>
flash&nbsp;as&nbsp;与js通信(转)
查看>>
Linux系统手动安装rzsz&nbsp;软件包
查看>>
PHP的事务处理机制
查看>>