Design Pattern - Bridge

评价: 

      Adapter用于对其他的类匹配某些接口,使之可以在某系统统一工作, 比如jdbc或odbc,等标准接口的转换.

      Bridge是一个战役级别的模式,它模拟了COM的思想,不过是COM二进制级别分离,它是代码模块级别的接口与实现分离, 而且带有注入影响性.


适用场景:(战役级别)

1。 实现接口系统和实现系统的分离,这样可以保持实现系统的多样性扩展或者切换。

2。 隔离实现的变动,对接口部分的影响。

3。 横向切分一个类接口,或者分2部分实现,使用聚合技术(aggregation)来共享某些实现。

实际应用中,第三种情景应用较多,还有另一种应用,就是在STL的functor中,为了避免C++的多态开销,使用此模式来使类的多态横向到具体实现,而接口类没有虚函数指针.也就是下面Target类的两个virtual都可以去掉,但还是具备多态的能力.


// Bridge.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

//Implementor
class Implementor
{
public:
	virtual void Method() = 0;
};

//consumer
class Target
{
	virtual Implementor* GetImp() = 0;
public:
	virtual void Method(){
		GetImp()->Method();
	}
};

//Concret implementation 1
class ImplemetorConcret1 : public Implementor
{
public:
	virtual void Method(){
		cout << "This is concret implementation1." << endl;
	}
};

//Concret implementation 2
class ImplemetorConcret2 : public Implementor
{
public:
	virtual void Method(){
		cout << "This is concret implementation2." << endl;
	}
};
//Concret Consumer..
class TargetConcret : public Target
{
	int _type;
public:
	TargetConcret(int type):_type(type){}
private:
	//Include multiple implementation in one
	virtual Implementor* GetImp(){
		Implementor* imp = NULL;
		if(_type == 0)
			imp = new ImplemetorConcret1();
		else
			imp = new ImplemetorConcret2();
		
		return imp;
	}
};

int main(int argc, char* argv[])
{
	TargetConcret target(0);
	target.Method();

	TargetConcret target1(2);
	target1.Method();
	return 0;
}


你可能感兴趣的:(Design Pattern - Bridge)