0%

设计模式之适配器模式和中介者模式

设计模式基础(10):适配器模式&中介者模式

包含适配器模式&中介者模式两种模式中的C++示例代码、面向的问题、图解两种模式核心思想

适配器模式

面向的需求

  • 将旧的接口功能,适配到新的接口功能

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//目标接口(新接口)
class ITarget{
public:
virtual void process()=0;
};

//遗留接口(老接口)
class IAdaptee{
public:
virtual void foo(int data)=0;
virtual int bar()=0;
};

//遗留类型
class OldClass: public IAdaptee{
//....
};

//对象适配器
class Adapter: public ITarget{ //继承
protected:
IAdaptee* pAdaptee;//组合

public:

Adapter(IAdaptee* pAdaptee){
this->pAdaptee=pAdaptee;
}

virtual void process(){
int data=pAdaptee->bar();
pAdaptee->foo(data);

}


};

//类适配器,这种类适配方式常伴随许多问题,应该优选对象适配器
class Adapter: public ITarget,
protected OldClass{ //多继承


}

int main(){
IAdaptee* pAdaptee=new OldClass();

ITarget* pTarget=new Adapter(pAdaptee);
pTarget->process();
}
};
1
2
3
4
5
6
7
8
//STL中的stack和queue中都采用了对象适配器,这里没有继承,因为适配器本身充当了新接口
class stack{
deqeue container;
};

class queue{
deqeue container;
};

代码思想分析

适配器模式

关键点

  • 核心思想:复用现存的类到新的应用环境。
  • 优先采用对象适配器

中介者模式

面向的需求

  • 当多个类之间产生大量复杂的互相引用时,可以考虑引入中介者来减少系统之间的耦合关系。

类图分析

中介者模式

关键点

  • 中介者模式将多个对象间的控制逻辑进行集中的管理,简化系统的维护。
  • 作为对比可以想到门面模式是解耦子系统和外部系统的关系。中介者模式是解耦系统内部各个对象之间的关系。