benxintuzi

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

模式动机:当某个接口可能有多种实现方式时,一般会使用继承来解决。但是继承总是体现出与具体的平台相关,无法很好地进行扩充,此时需要将接口与实现类最大可能地解耦,使其二者都可以独立发展而不受影响,增大系统的灵活性。

模式定义(Bridge Pattern)将抽象接口与具体实现分离开来,使得两部分都可以独立变化而不受影响。

模式结构图:

 

 

模式代码:

bt_桥接模式.h

 1 #ifndef BP_H
 2 #define BP_H
 3 #include <iostream>
 4 using namespace std;
 5 
 6 /*
 7     具体操作接口
 8 */
 9 class Implementor
10 {
11 public:
12     virtual ~Implementor(){ }
13     virtual void operationImpl() = 0;
14 };
15 class ConcreteImplementorA : public Implementor
16 {
17 public:
18     virtual void operationImpl()
19     {
20         cout << "调用A类具体实现方法" << endl;
21     }
22 };
23 class ConcreteImplementorB : public Implementor
24 {
25 public:
26     virtual void operationImpl()
27     {
28         cout << "调用B类具体实现方法" << endl;
29     }
30 };
31 
32 /*
33     抽象功能接口
34 */
35 class Abstraction
36 {
37 public:
38     virtual ~Abstraction(){ }
39     virtual void operation() = 0;
40     virtual void setImpl(Implementor* impl) = 0;
41 
42 protected:
43     Implementor* impl;
44 };
45 
46 class RefinedAbstraction : public Abstraction
47 {
48 public:
49     virtual void setImpl(Implementor* impl)
50     {
51         this->impl = impl;
52     }
53     virtual void operation()
54     {
55         impl->operationImpl();
56     }
57 };
58 
59 #endif // BP_H

 

测试用例.cpp

 1 #include "bt_桥接模式.h"
 2 
 3 int main()
 4 {
 5     cout << "***** 桥接模式测试 *****" << endl;
 6     Implementor* pI = new ConcreteImplementorA;
 7     Abstraction* pA = new RefinedAbstraction;
 8     pA->setImpl(pI);
 9     pA->operation();
10 
11     return 0;
12 }


 

模式分析:桥接模式的优点主要包含如下三部分:

1>  分离接口及其实现:抽象类的具体实现部分可以延迟到运行时进行配置,一个对象即使在运行时也能改变其实现部分。同时客户只需知道Abstraction和Implementor接口即可,无需了解其他类的细节。

2>  可扩展性增强:可以独立地对Abstraction和Implementor层次结构进行扩充,二者是相互独立的,耦合性比较小。

3>  实现细节对于客户透明。

 

 

posted on 2015-06-02 14:37  benxintuzi  阅读(243)  评论(0编辑  收藏  举报