天天看點

【愚公系列】2021年12月 通用職責配置設定原則(八)-中介原則(Indirection Principle)

文章目錄

前言

一、中介原則(Indirection Principle)

二、使用步驟

示例

GRASP:General Responsibility Assignment Software Patterns 通用職責配置設定軟體模式。

首先我們先來區分下GRASP與GOF模式的差別,它們主要在什麼時候用,用來做什麼。在軟體開發過程中,我們常說面向對象開發,面向對象思想應該貫穿整個軟體開發生命周期。我們在将現實世界中的業務對象及業務功能抽象成軟體系統中的系統對象過程中應該遵循使用GRASP模式。而在具體技術實作上應該遵循使用GOF設計模式,來實作系統功能。即GRASP主要使用在分析設計階段,與具體技術無關;而GOF模式主要使用在開發階段,與具體技術相關,它是對GRASP設計成果進行實作時而使用,是一種開發階段的設計模式。

GRASP軟體設計模式包括9個模式:建立者、資訊專家、低耦合、控制器、高内聚、多态性、純虛構、間接性、防止變異。

提示:以下是本篇文章正文内容,下面案例可供參考

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

繼續閱讀