桥接模式C++实现

2014-11-24 07:33:45 · 作者: · 浏览: 0

最近自学了设计模式,发现好多书的java实现的。因为本人是从事C++开发的,因此想尝试用C++自己实现一遍,加深理解。

桥接模式

定义:

将抽象部分与它的实现部分分离,使它们都可以独立变化

适用性:

1、 不希望在抽象和它的实现部分之间有一个固定的绑定关系。

2、 类的抽象以及它的实现都应该可以通过生产子类的方法加以扩充。

3、 对抽象的实现部分的修改应对客户不产生影响

4、 想对客户隐藏抽象的实现部分

5、 想在多个对象间共享实现,同时客户并不知道

结构类图:

\

Abstraction:

定义抽象类接口并且维护一个指向Implementor的指针

RefinedAbstraction:< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+wKmz5EFic3RyYWN0aW9utqjS5bXEvdO/2jwvcD4KPHA+SW1wbGVtZW50b3KjujwvcD4KPHA+tqjS5cq1z9bA4LXEvdO/2jwvcD4KPHA+Q29uY3JldGVJbXBsZW1lbnRvckEgICBDb25jcmV0ZUltcGxlbWVudG9yQjwvcD4KPHA+yrXP1kltcGxlbWVudG9ytcS907/aPC9wPgo8cCBhbGlnbj0="left">优点:

1、 分离接口以及其实现部分

2、 提供可扩充性

3、 实现细节对客户透明

实现:

class Implementor

{

public:

Implementor(){}

virtual void doSomething() = 0;

};

//具体实现类A

classConcreteImplementorA:public Implementor

{

public:

ConcreteImplementorA(){}

voiddoSomething()

{

cout<<"ConcreteImplementorA doSomething"<

}

};

//具体实现类B

classConcreteImplementorB:public Implementor

{

public:

ConcreteImplementorB(){}

voiddoSomething()

{

cout<<"ConcreteImplementorB doSomething"<

}

};

//抽象接口部分

class Abstraction

{

public:

Abstraction(Implementor*pimp):m_pImp(pimp)

{}

//仅仅调用实现部分

virtual void Request()

{

m_pImp->doSomething();

}

private:

Implementor *m_pImp;

};

class RefinedAbstraction:public Abstraction

{

public:

RefinedAbstraction(Implementor*pimp):Abstraction(pimp)

{}

//扩充Request接口功能

void Request()

{

cout<<"RefinedAbstraction Request"<

Abstraction::Request();

}

};

//可以实现接口部分和实现部分的组合

Implementor*pimpa = new ConcreteImplementorA;

Implementor *pimpb = new ConcreteImplementorB;

Abstraction *pa = new RefinedAbstraction(pimpa);

Abstraction *pb = new RefinedAbstraction(pimpb);

pa->Request();

pb->Request();