评价:
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"#includeusing namespace std;//Implementorclass Implementor{public: virtual void Method() = 0;};//consumerclass Target{ virtual Implementor* GetImp() = 0;public: virtual void Method(){ GetImp()->Method(); }};//Concret implementation 1class ImplemetorConcret1 : public Implementor{public: virtual void Method(){ cout << "This is concret implementation1." << endl; }};//Concret implementation 2class 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;}