模式(十五)——多“类”通信:中介者模式"/>
设计模式(十五)——多“类”通信:中介者模式
中介者模式
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。用来降低多个对象和类之间通信复杂性。
- 优点:降低类的复杂度,将一对多的关系转化成一对一关系。将各类之间解耦
- 缺点:使用中介者到后期会十分庞大,变得复杂,维护难度会巨增
- 使用场景:当系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系混乱难以复用其对象。想通过一个中间类来封装多个类的行为,而又不想生成太多子类的时候可以考虑采用中介者模式。
示例
利用群聊来展示中介者模式的简单使用:
类结构设计如下:
代码逻辑如下:
public interface ISend{string Name { get; set; }void Send(string message);}public class User : ISend{public string Name { get; set; }public User(string name){this.Name = name;}public void Send(string message){ChatRoom.ShowMessage(this, message);}}public class StoreSystem : ISend{public string Name { get; set; }public StoreSystem(){this.Name = "商城系统";}public void Send(string message){ChatRoom.ShowMessage(this, message);}} public class BoardSystem : ISend{public string Name { get; set; }public BoardSystem(){this.Name = "系统广播";}public void Send(string message){ChatRoom.ShowMessage(this, message);}}
public class ChatRoom{public static void ShowMessage(ISend user, string message){Console.WriteLine("[{0}]:{1}", user.Name, message);}}
static void Main(string[] args){User user1 = new User("张三");User user2 = new User("定坤");StoreSystem store = new StoreSystem();BoardSystem board = new BoardSystem();user1.Send("hahhahah");user2.Send("成功啦");store.Send("新品上市啦");board.Send("XXXX获得了大奖");}
执行结果:
[张三]:hahhahah
[定坤]:成功啦
[商城系统]:新品上市啦
[系统广播]:XXXX获得了大奖
上诉例子中,ChatRoom就相当于中介者,在系统的群聊里用户可能会收发消息,不同的系统可能会有各自的消息广播,利用中介者模式每个消息的发送者只管消息的发送,所有的消息处理都交给中介者ChatRoom来处理,以此来达到解耦的目的。
更多推荐
设计模式(十五)——多“类”通信:中介者模式
发布评论