博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bridge(桥接)-对象结构型模式
阅读量:5256 次
发布时间:2019-06-14

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

1.意图

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

2.动机

    在抽象类与它的实现之间起到桥梁作用,使它们可以独立地变化。

3.适用性

  • 不希望在抽象和它的实现部分之间有一个固定的绑定关系。这种情况可能是因为,在程序运行时刻实现部分可以被选择或切换。
  • 类的抽象以及它的实现部分都应该可以通过生成子类的方式加以扩充。这时桥接模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
  • 对一个抽象实现部分的修改的修改不应该对客户产生影响,即客户代码不必要重新编译。
  • 对客户完全隐藏抽象的实现部分。C++中类的表示在类接口中是可见的。
  • 有许多类要生成,这样一种类层次结构说明你必须将一个对象分解成两部分。

4.结构

    

5.代码实例

    

#include 
class AbstactionImpl;class Abstration{public: void virtual Operaion()=0; void virtual SetImpl(std::shared_ptr
& pImpl)=0;protected: std::shared_ptr
m_pImpl;};class RedefinedAbstration : public Abstration{public: void Operaion(); void SetImpl(std::shared_ptr
& pImpl);};
class AbstactionImpl{public:    void virtual OperationImpl()=0;};class ConcreteImplentorA : public AbstactionImpl{public:    void  OperationImpl();};class ConcreteImplentorB : public AbstactionImpl{public:    void  OperationImpl();};
#include "Abstration.h"#include "Implentor.h"void RedefinedAbstration::Operaion(){    m_pImpl->OperationImpl();}void RedefinedAbstration::SetImpl(std::shared_ptr
& pImpl){ m_pImpl = pImpl;}
#include 
#include "Implentor.h"void ConcreteImplentorA::OperationImpl(){ std::cout<<"ConcreteImplenorA Exectued" <
#include 
#include "Abstration.h"#include "Implentor.h"int main(){ std::shared_ptr
pConcreteImplA(new ConcreteImplentorA); std::shared_ptr
pConcreteImplB(new ConcreteImplentorB); std::shared_ptr
pRedefinedAbstration(new RedefinedAbstration); pRedefinedAbstration->SetImpl(pConcreteImplA); pRedefinedAbstration->Operaion(); pRedefinedAbstration->SetImpl(pConcreteImplB); pRedefinedAbstration->Operaion(); while(1);}

6.测试结果

    

7.效果

  • 分离接口及其实现部分 一个实现未必不变地绑定在一个接口上。抽象类的实现可以在运行时刻进行配置,一个对象甚至可以在运行时刻改变它的实现。将Abstraction和Implementor分离有助于降低对实现部分编译时刻的依赖性,当改变一个实现类时,并不需要重新编译Abstaction类和它的客户程序。
  • 提高可扩充性 可以独立地对Abstraction和Implementor层次结构进行扩充。
  • 实现细节对客户透明 可以对客户隐藏实现细节。

 

转载于:https://www.cnblogs.com/mgp200866130/p/5516866.html

你可能感兴趣的文章
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>
关闭Chrome浏览器的自动更新和升级提示
查看>>
移动、尺寸改变
查看>>
poj2255Tree Recovery【二叉树重构】
查看>>
tcpcopy 流量复制工具
查看>>
vue和react的区别
查看>>
第十一次作业
查看>>