C++设计模式之 -- 桥接模式 (Bridge)

来源:互联网 发布:c语言代码在线测试 编辑:程序博客网 时间:2024/06/13 21:20

定义

桥接模式(Bridge Pattern) 是指将抽象部分与它的实现部分分离,使它们都可以独立的变化。


例如:

我们要实现一个对象,用来序列化数据,将数据序列化到磁盘上可能有多重方式,json 格式, XML 格式或者database 等。使用桥接模式,将具体的序列化实现部分分离开来,使得抽象和实现的部分可以独立的变化,增强了代码的扩展性。


类图

一个典型的桥接模式的类图如下所示:



代码示例

BridgePattern.h

#pragma onceclass Implementor{public:virtual void OperationImplemention() = 0;};class Abstraction{public:Abstraction(Implementor* pImp);virtual ~Abstraction();public:virtual void Operation() = 0;protected:Implementor* GetImplementor() { return m_pImplementor; }private:Implementor* m_pImplementor;};class CRefinedAbstraction : public Abstraction {public:CRefinedAbstraction(Implementor* pImp);virtual ~CRefinedAbstraction();virtual void Operation();};class CConcreateImplementorA : public Implementor{public:virtual void OperationImplemention();};class CConcreateImplementorB : public Implementor{public:virtual void OperationImplemention();};

BridgePattern.cpp

#include "BridgePattern.h"#include <iostream>//--------- Abstraction ---------------Abstraction::Abstraction(Implementor* pImp) : m_pImplementor(pImp){}Abstraction::~Abstraction(){if (m_pImplementor) {delete m_pImplementor;m_pImplementor = 0;}}//---------- CRefeinedAbstraction ----------------CRefinedAbstraction::CRefinedAbstraction(Implementor* pImp): Abstraction(pImp){}CRefinedAbstraction::~CRefinedAbstraction(){}void CRefinedAbstraction::Operation(){if (GetImplementor()){GetImplementor()->OperationImplemention();}}//------------- CConcreateImplementor ----------void CConcreateImplementorA::OperationImplemention(){std::cout << "CConcreateImplementorA operation ! " << std::endl;}void CConcreateImplementorB::OperationImplemention(){std::cout << "CConcreateImplementorB operation ! " << std::endl;}

Client

<span style="white-space:pre"></span>{Abstraction* pAbstraction = new CRefinedAbstraction(new CConcreateImplementorA());pAbstraction->Operation();}{Abstraction* pAbstraction = new CRefinedAbstraction(new CConcreateImplementorB());pAbstraction->Operation();}




0 0
原创粉丝点击