写点什么

【愚公系列】2022 年 06 月 通用职责分配原则 (八)- 中介原则

作者:愚公搬代码
  • 2022 年 6 月 20 日
  • 本文字数:962 字

    阅读完需:约 3 分钟

前言

GRASP:General Responsibility Assignment Software Patterns 通用职责分配软件模式。


首先我们先来区分下 GRASP 与 GOF 模式的区别,它们主要在什么时候用,用来做什么。在软件开发过程中,我们常说面向对象开发,面向对象思想应该贯穿整个软件开发生命周期。我们在将现实世界中的业务对象及业务功能抽象成软件系统中的系统对象过程中应该遵循使用 GRASP 模式。而在具体技术实现上应该遵循使用 GOF 设计模式,来实现系统功能。即 GRASP 主要使用在分析设计阶段,与具体技术无关;而 GOF 模式主要使用在开发阶段,与具体技术相关,它是对 GRASP 设计成果进行实现时而使用,是一种开发阶段的设计模式。


GRASP 软件设计模式包括 9 个模式:创建者、信息专家、低耦合、控制器、高内聚、多态性、纯虚构、间接性、防止变异。


<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">


<font color=#999AAA >提示:以下是本篇文章正文内容,下面案例可供参考

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

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022.03.01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年06月 通用职责分配原则(八)-中介原则_6月月更_愚公搬代码_InfoQ写作社区