桥接模式(Bridge)

设计模式系列

Bridge桥接模式——对象结构模式

1.意图

将抽象部分与它的实现部分分离,使它们都可以独立地变化

 

2.适用性

  • 不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换
  • 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充
  • 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译
  • (C++)你想对客户完全隐藏抽象的实现部分。在C++中,类的表示在类接口中是可见的
  • 你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点

 

3.结构

 

4.参与者

  • Abstraction

—— 定义抽象类的接口

—— 维护一个指向Implementor类型对象的指针

  • RefinedAbstraction

—— 扩充由Abstraction定义的接口

  • Implementor

—— 定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个接口完全不同。一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于操作的较高层次的操作

  • ConcreteImplementor

—— 实现Implementor接口并定义它的具体实现。

 

5.效果

优点:

1)分离接口及其实现部分

2)提高可扩充性

3)实现细节对客户透明(也可以隐藏实现细节)

4)在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则

缺点:

1)增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程 正确识别出系统中两个独立变化的维度并不是一件容易的事情

 

6.相关模式

Abstract Factory模式可以用来创建和配置一个特定的Bridge模式。

Adapter模式用来帮助无关的类协同工作,它通常在系统设计完成后才会被使用。然而,Bridge模式则是在系统开始时就被使用,它使得抽象接口和实现部分可以独立进行改变。

 

7.案例实现

电脑有各种品牌(联想、戴尔),每台电脑都有一个操作系统(window、linux)。定义一台电脑,使其电脑品牌和操作系统可单独选择。

#include <iostream>
using namespace std;

class IOS 
{
public:
    IOS() {}
    virtual ~IOS() { }
    virtual void run() = 0;
};

class CWindows :public IOS 
{
public:
    virtual void run() { cout << "Windows 正在运行" << endl; }
};

class CLinux :public IOS 
{
public:
    virtual void run() { cout << "Linux 正在运行" << endl; }
};

class IComputer 
{
public:
    virtual void Install(IOS* pOS) = 0;
};

class CLenvo :public IComputer 
{
public:
    virtual void Install(IOS* pOS) 
    {
        cout << "Lenvo正在安装操作系统" << endl;
        pOS->run();
    }
};

class CDell :public IComputer 
{
public:
    virtual void Install(IOS* pOS) {
        cout << "Dell正在安装操作系统" << endl;
        pOS->run();
    }
};

class CAcer :public IComputer
{
public:
    virtual void Install(IOS* pOS) 
    {
        cout << "Acer正在安装操作系统" << endl;
        pOS->run();
    }
};

int main(void) 
{
    IOS* pWindows = new CWindows;
    IOS* pLinux = new CLinux;

    IComputer* pLenvo = new CLenvo;
    pLenvo->Install(pWindows);
    system("pause");
    return 0;
}

 

 

设计模式系列 https://blog.csdn.net/nie2314550441/article/details/105849726

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值