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

中介原则(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 访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值