设计模式---结构类型---桥接
来源:互联网 发布:放烟花网络意思 编辑:程序博客网 时间:2024/05/12 10:13
1、意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
2、适用性
1)你不希望在抽象和他的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
2)类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
3)对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
4)你想对客户完全隐藏抽象的实现部分。在C++中,类的表示在类接口中是可见的。
5)你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。
3、C++实例
// ootest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#define NULL 0// 实现基类class Implementor{public:virtual void Operation() = 0;virtual ~Implementor(){}protected:Implementor(){}};class ConcreteImplementorA:public Implementor{public:ConcreteImplementorA(){ }~ConcreteImplementorA(){ }void Operation(){std::cout<<"ConcreteImplementorA:Operation"<<std::endl;}};class ConcreteImplementorB:public Implementor{public:ConcreteImplementorB(){ }~ConcreteImplementorB(){ }void Operation(){std::cout<<"ConcreteImplementorB:Operation"<<std::endl;}};// 抽象基类class Abstraction{public:virtual void Operation() = 0;virtual ~Abstraction(){}protected:Abstraction(){}};class RefinedAbstractionA:public Abstraction{public:RefinedAbstractionA( Implementor *imp ){this->_imp = imp;}virtual void Operation(){std::cout<<"RefinedAbstractionA::Operation"<<std::endl;this->_imp->Operation();}virtual ~RefinedAbstractionA(){delete this->_imp;this->_imp = NULL;}private:Implementor *_imp;};class RefinedAbstractionB:public Abstraction{public:RefinedAbstractionB( Implementor *imp ){this->_imp = imp;}virtual void Operation(){std::cout<<"RefinedAbstractionB::Operation"<<std::endl;this->_imp->Operation();}virtual ~RefinedAbstractionB(){delete this->_imp;this->_imp = NULL;}private:Implementor *_imp;};int _tmain(int argc, _TCHAR* argv[]){/* 将抽象部分与它的实现部分分离,使得它们可以独立地变化 1、抽象Abstraction与实现Implementor分离; 2、抽象部分Abstraction可以变化,如new RefinedAbstractionA(imp)、new RefinedAbstractionB(imp2); 3、实现部分AbstractionImplement也可以变化,如new ConcreteImplementorA()、new ConcreteImplementorB(); */ConcreteImplementorA *imp1 = new ConcreteImplementorA(); // 实现部分Abstraction *abs1 = new RefinedAbstractionA( imp1 ); // 抽象部分abs1->Operation();std::cout<<"ConcreteImplementorA -- RefinedAbstractionA "<< std::endl;std::cout<<std::endl;ConcreteImplementorA *imp2 = new ConcreteImplementorA();Abstraction *abs2 = new RefinedAbstractionB( imp2 );abs2->Operation();std::cout<<"ConcreteImplementorA -- RefinedAbstractionB "<< std::endl;std::cout<<std::endl;ConcreteImplementorB *imp3 = new ConcreteImplementorB();Abstraction *abs3 = new RefinedAbstractionA( imp3 );abs3->Operation();std::cout<<"ConcreteImplementorB -- RefinedAbstractionA "<< std::endl;std::cout<<std::endl;ConcreteImplementorB *imp4 = new ConcreteImplementorB();Abstraction *abs4 = new RefinedAbstractionB( imp4 );abs4->Operation();std::cout<<"ConcreteImplementorB -- RefinedAbstractionB "<< std::endl;std::cout<<std::endl;return 0;}
0 0
- 设计模式---结构类型---桥接
- 设计模式---结构类型---适配器
- 设计模式---结构类型---装饰
- 设计模式---结构类型---组合
- 设计模式---结构类型---外观
- 设计模式---结构类型---代理
- 设计模式---结构类型---享元
- 设计模式-结构型-桥接
- 创建、结构、行为型设计模式类型归纳
- 创建、结构、行为型设计模式类型归纳
- 创建、结构、行为型设计模式类型归纳
- 设计模式-结构型模式-桥接
- 设计模式-结构模式
- 设计模式之结构型模式(一)-----桥接(bridge)模式
- [设计模式-结构型]桥接(Bridge )
- 设计模式-结构型-bridge桥接
- 设计模式---结构型
- 结构型设计模式
- Redis3Cluster的学习笔记
- 单知识点运用---使用通知--进行关于不同视图中数值传递
- PHP之session机制和优化
- CSS模块化思维有用办理CSS款式
- centos安装php的rabbitmq扩展amqp
- 设计模式---结构类型---桥接
- 程序员===Java基础===多态和接口
- Git
- Unity Shader Example 10 (高斯模糊)
- 编程实现控制网页滚动条
- 51nod1623 完美消除
- 几种控制语句
- JS 获取Form表单信息序列化
- HDU 4920 (水~)