中介者模式
概述:
在软件开发中,我们有时会碰上许多对象互相联系互相交互的情况,对象之间存在复杂的引用关系,当需求更改时,对系统进行修改将会非常困难。为了对系统的对象进行解耦,可以引入一个间接层来管理对象之间的关系,这就是中介者模式。
结构图:
借图理解:
使用中介者
示例:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
/// <summary> /// 抽象中介者 /// </summary> public abstract class Mediator { public Colleague _colleague; public Colleague GetColleague() { return _colleague; } public void SetColleague(Colleague colleague) { _colleague = colleague; } public abstract void DoSomething(); } /// <summary> /// 具体的中介者 /// </summary> public class ConcreteMediator : Mediator { public override void DoSomething() { //调用Colleague对象的方法 _colleague.Method(); } } /// <summary> /// 抽象Colleague /// </summary> public abstract class Colleague { public abstract void Method(); } /// <summary> /// 具体的Colleague /// </summary> public class ConcreteColleague1:Colleague { private Mediator mediator; public ConcreteColleague1(Mediator mediator) { this .mediator = mediator; } public override void Method() { Console.WriteLine( "ConcreteColleague1要做的事!" ); } } /// <summary> /// 具体的Colleague /// </summary> public class ConcreteColleague2 : Colleague { private Mediator mediator; public ConcreteColleague2(Mediator mediator) { this .mediator = mediator; } public override void Method() { Console.WriteLine( "ConcreteColleague2要做的事!" ); } } |
客户端调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Program { static void Main( string [] args) { Mediator mediator = new ConcreteMediator(); Colleague coll1 = new ConcreteColleague1(mediator); mediator.SetColleague(coll1); coll1.Method(); Console.ReadLine(); Colleague coll2 = new ConcreteColleague2(mediator); mediator.SetColleague(coll2); coll2.Method(); Console.ReadLine(); } } |
效果:
1.降低了系统对象之间的耦合性,使得对象易于独立的被复用。
2.提高系统的灵活性,使得系统易于扩展和维护。
适用场景:
1.一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
2.一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
3.想定制一个分布在多个类中的行为,而又不想生成太多的子类。