中介原则(Indirection Principle)
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/383 访问。
(1)问题
1、如何分配职责以避免两个(或多个)事物之间的直接耦合?
2、如何解耦对象以降低耦合度并提高系统的重用性?
(2)方案
分配职责给中间对象以协调组件或服务之间的操作,使得它们不直接耦合。中间对象就是在其他组件之间建立的中介。
(3)分析
要避免对象之间的直接耦合,最常用的做法是在对象之间引入一个中间对象或中介对象,通过中介对象来间接相连。中介模式对应于面向对象设计原则中的迪米特法则,在外观模式、代理模式、中介者模式等设计模式中都体现了中介原则。
示例:
public class SinaChat : ChatRoom {
public override void Talk2All(User sender, string message) {
_users.Where(u => u.Name != sender.Name)
.ToList()
.ForEach((u) => u.OnRecieve(sender, message, true));
Console.WriteLine(SPLIT_BREAK);
}
public override void Talk2User(User sender, User reciever, string message) {
var user = _users.Where(u => u.Name == reciever.Name)
.FirstOrDefault();
user.OnRecieve(sender, message);
Console.WriteLine(SPLIT_BREAK);
}
}
以上代码可在我的 C#设计模式 系列博文中行为型模式下的中介者模式中找到。
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/383 访问。