写点什么

【愚公系列】2022 年 06 月 通用职责分配原则 (三)- 低耦合原则

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

    阅读完需:约 4 分钟

前言

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 >提示:以下是本篇文章正文内容,下面案例可供参考

一、低耦合原则(Low Coupling Principle)

(1)问题


怎样支持低的依赖性,减少变更带来的影响,提高重用性?


(2)方案


分配一个职责,使得保持低耦合度。


(3)分析


耦合是评价一个系统中各个元素之间连接或依赖强弱关系的尺度,具有低耦合的元素不过多依赖其他元素。此处的元素可以是类,也可以是模块、子系统或者系统。具有高耦合的类过多地依赖其他类,这种设计将会导致:一个类的修改导致其他类产生较大影响;系统难以维护和理解;系统重用性差,在重用一个高耦合的类时不得不重用它所依赖的其他类。因此需要对高耦合的系统进行重构。


类 A 和类 B 之间的耦合关系体现如下:A 具有一个 B 类型的属性;A 调用 B 的方法;A 的方法包含对 B 的引用,如方法参数类型为 B 或返回类型为 B;A 是 B 的直接或者间接子类;B 是一个接口,A 实现了该接口。低耦合模式鼓励在进行职责分配时不增加耦合性,从而避免高耦合可能产生的不良后果。在进行类设计时,需要保持类的独立性,减少类变更所带来的影响,它通常与信息专家原则和高内聚原则一起出现。为了达到低耦合,我们可以通过如下方式对设计进行改进:


1、在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;2、在类的设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;3、在类的设计上,只要有可能,一个类型应当设计成不变类(C#语言中为 sealed 或 static);4、在对其他类的引用上,一个对象对其他对象的引用应当降到最低。

二、使用步骤

示例

public sealed class Singleton {    private static Singleton _instance = null;    public static Singleton GetInstance() {        if(_instance == null) {            _instance = new Singleton();            Console.WriteLine("Singleton.GetInstance()!");        }        return _instance;    }}
复制代码


以上代码可在我的 C#设计模式 系列博文中创建型模式下的单例模式中找到。


Singleton 类是一个单例类,它几乎没有任何业务耦合,使用 sealed 密封此类以防止被继承,_instance 的访问权限为 private,因为要尽可能的降低访问权限,它的引用由公开的 GetInstance 方法返回。

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

还未添加个人签名 2022.03.01 加入

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

评论

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