您的位置:首页 > 编程语言 > C语言/C++

C++ Bridge 设计模式

2011-03-06 21:30 288 查看
C++ Bridge 设计模式


Bridge模式是应用最广泛也是我个人比较喜欢的一个C++设计模式之一。

Bridge模式意图:降低抽象和实现之间的耦合。

面向对象系统设计和分析中最重要的一点就是:高内聚,低耦合。Bridge模式使得抽象和实现能够相对独立。





Bridge模式结构图:










Bridge模式的关键在于Abstraction的派生类中维护了一个纸箱Implementor类的指针。

让Implentor的派生类来去实现。从而实现了抽象和实现的相对独立。



参考代码:



#pragma once
//Abstraction.h
class Abstraction
{
public:
	Abstraction(void){};
	virtual ~Abstraction(void){};

	virtual void Operation() = 0;
};






#pragma once
//Implementor.h
class Implementor
{
public:
	Implementor(void){};
	virtual ~Implementor(void){};

	virtual void OperationImp() = 0;
};








#pragma once

//ConcreteImplementorA.h
#include "implementor.h"

class ConcreteImplementorA :
	public Implementor
{
public:
	ConcreteImplementorA(void);
	~ConcreteImplementorA(void);

	void OperationImp();
};




#pragma once

//ConcreteImplementorB.h
#include "implementor.h"

class ConcreteImplementorB :
	public Implementor
{
public:
	ConcreteImplementorB(void);
	~ConcreteImplementorB(void);

	void OperationImp();
};






#pragma once

//RefinedAbstraction.h
#include "abstraction.h"
#include "Implementor.h"

class Implementor;

class RefinedAbstraction :
	public Abstraction
{
public:
	RefinedAbstraction(void);
	RefinedAbstraction(Implementor *imp);
	~RefinedAbstraction(void);

	void Operation();

private:
	Implementor *m_imp;

};




#include <iostream>
#include "ConcreteImplementorA.h"

using namespace std;

//ConcreteImplementonA.cpp
ConcreteImplementorA::ConcreteImplementorA(void)
{
}

ConcreteImplementorA::~ConcreteImplementorA(void)
{
}

void ConcreteImplementorA::OperationImp()
{
	cout << "Hi, I am in ConcreteImplementorA" << endl;
}






#include <iostream>
#include "ConcreteImplementorB.h"

using namespace std;

//ConcreteImplementorB.cpp
ConcreteImplementorB::ConcreteImplementorB(void)
{
}

ConcreteImplementorB::~ConcreteImplementorB(void)
{
}

void ConcreteImplementorB::OperationImp()
{
	cout << "Hi, I am in ConcreteImplementorB" << endl;
}






#include <iostream>
#include "RefinedAbstraction.h"

using namespace std;

//RefinedAbstraction.cpp
RefinedAbstraction::RefinedAbstraction(void)
{
	m_imp = NULL;
	
}

RefinedAbstraction::~RefinedAbstraction(void)
{
}

RefinedAbstraction::RefinedAbstraction(Implementor *imp)
{
	m_imp = imp;
}

void RefinedAbstraction::Operation()
{
	m_imp->OperationImp();
}




#include "Abstraction.h"
#include "ConcreteImplementorA.h"
#include "ConcreteImplementorB.h"
#include "RefinedAbstraction.h"

//main.cpp
int main()
{

	ConcreteImplementorA *pImpA = new ConcreteImplementorA;
	ConcreteImplementorB *pImpB = new ConcreteImplementorB;
	Abstraction *objA = new RefinedAbstraction(pImpA);
	Abstraction *objB = new RefinedAbstraction(pImpB);

	objA->Operation();
	objB->Operation();
	
}








我个人 非常欣赏也非常推崇Bridge模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: