通用职责分配软件原则之8-中介原则

中介原则(Indirection Principle)


(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#设计模式 系列博文中行为型模式下的中介者模式中找到。

猜你喜欢

转载自blog.csdn.net/qq_31116753/article/details/81259807