中介者模式 - 行为型模式的协调调停者
在软件设计中,中介者模式是一种行为型设计模式,它定义了一个中介者对象,该对象封装了一组对象之间的交互方式。中介者模式使得对象之间不直接相互通信,而是通过中介者对象进行协调,降低了对象之间的耦合性。本文将深入讨论中介者模式的概念、实现方式以及在实际应用中的使用场景。
中介者模式的概念
中介者模式(Mediator Pattern)是一种行为型设计模式,其核心思想是定义一个中介者对象,该对象封装了一组对象之间的交互方式。中介者模式使得对象之间不直接相互通信,而是通过中介者对象进行协调。这样的设计降低了对象之间的耦合性,使得系统更加灵活和易于维护。
中介者模式的 UML 类图
classDiagram
class Mediator {
+ RegisterColleague(colleague: Colleague): void
+ SendMessage(colleague: Colleague, message: string): void
}
class Colleague {
- mediator: Mediator
+ Send(message: string): void
+ Receive(message: string): void
}
class ConcreteMediator {
- colleagues: List
+ RegisterColleague(colleague: Colleague): void
+ SendMessage(colleague: Colleague, message: string): void
}
class ConcreteColleagueA
class ConcreteColleagueB
Mediator <|.. ConcreteMediator
Colleague <|.. ConcreteColleagueA
Colleague <|.. ConcreteColleagueB
中介者模式的实现方式
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| using System; using System.Collections.Generic;
public interface Mediator { void RegisterColleague(Colleague colleague); void SendMessage(Colleague colleague, string message); }
public abstract class Colleague { protected Mediator mediator;
public Colleague(Mediator mediator) { this.mediator = mediator; }
public abstract void Send(string message); public abstract void Receive(string message); }
public class ConcreteMediator : Mediator { private List<Colleague> colleagues;
public ConcreteMediator() { this.colleagues = new List<Colleague>(); }
public void RegisterColleague(Colleague colleague) { colleagues.Add(colleague); }
public void SendMessage(Colleague colleague, string message) { foreach (var c in colleagues) { if (c != colleague) { c.Receive(message); } } } }
public class ConcreteColleagueA : Colleague { public ConcreteColleagueA(Mediator mediator) : base(mediator) { }
public override void Send(string message) { Console.WriteLine("Colleague A sends message: " + message); mediator.SendMessage(this, message); }
public override void Receive(string message) { Console.WriteLine("Colleague A receives message: " + message); } }
public class ConcreteColleagueB : Colleague { public ConcreteColleagueB(Mediator mediator) : base(mediator) { }
public override void Send(string message) { Console.WriteLine("Colleague B sends message: " + message); mediator.SendMessage(this, message); }
public override void Receive(string message) { Console.WriteLine("Colleague B receives message: " + message); } }
|
中介者模式的应用场景
中介者模式适用于以下情况:
- 一组对象之间存在复杂的交互关系,导致它们之间的通信结构复杂难以理解。
- 对象之间的交互行为需要随时变化,或者需要增加新的对象时。
- 系统中的对象由于通信关系过于紧密,导致它们之间的耦合性较高。
中介者模式的优势
- 降低耦合性: 中介者模式通过将对象之间的通信集中在中介者中,降低了对象之间的耦合性。
- 简化对象交互: 中介者模式将对象之间的交互方式封装在中介者中,使得对象之间的通信更加简单清晰。
- 易于扩展: 可以通过增加新的同事类和调整中介者的实现,轻松地扩展系统。
使用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Program { static void Main() { ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator); ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator); mediator.RegisterColleague(colleagueA); mediator.RegisterColleague(colleagueB);
colleagueA.Send("Hello from Colleague A"); colleagueB.Send("Hi from Colleague B"); } }
|
总结
中介者模式是一种行为型设计模式,通过定义一个中介者对象,封装了一组对象之间的交互方式,降低了对象之间的耦合性。中介者模式使得对象之间不直接相互通信,而是通过中介者对象进行协调。在实际应用中