低耦合原则(Low Coupling Principle)

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/373 访问。


(1)问题

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

(2)方案

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

(3)分析

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

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

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


示例:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/373 访问。

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-低耦合原则相关推荐

  1. 通用职责分配软件原则之4-高内聚原则

    高内聚原则(High Cohesion Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/375 访问 ...

  2. GRASP通用职责分配软件模式

    1.  概述 它的核心思想是"职责分配(Responsibility Assignment)".GRASP提出了几个基本原则,用来解决面向对象设计的一些问题. Craig Larm ...

  3. 通用职责分配软件原则之7-纯虚构原则

    纯虚构原则(Pure Fabrication Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/381 ...

  4. 通用职责分配软件原则之6-多态原则

    多态原则(Polymorphism Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/379 访问. ...

  5. 通用职责分配软件原则之2-创造者原则

    创造者原则(Creator Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/371 访问. (1)问 ...

  6. 通用职责分配软件原则之1-信息专家原则

    信息专家原则(Information Expert Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/ ...

  7. 通用职责分配软件原则之9-受保护变量原则

    受保护变量原则(Protected Variations Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archiv ...

  8. 通用职责分配软件原则之5-控制器原则

    控制器原则(Controller Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/377 访问. ( ...

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

    中介原则(Indirection Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/383 访问. ( ...

最新文章

  1. mysql 主从 网络异常_mysql主从常见异常问题解决
  2. Java 集合系列(三)Collection 接口
  3. python 抛出异常_python 异常
  4. mobsdk线上崩溃事故报告_重大事故!IO问题引发线上20台机器同时崩溃
  5. 新浪微博爬虫设计(Python版)
  6. Java基础-基本数据类型
  7. 【转】ADO.Net之SqlConnection、 Sqlcommand的应用学习心得(思维导图,知识解析,案例分析)
  8. 安卓应用安全指南 4.7 使用可浏览的意图
  9. NSD cisco高级路由与交换技术--2014.8.16
  10. 通过外挂插件向预训练语言模型中融入知识
  11. CodeVS 1014 装箱问题(DP)
  12. 2022Android高级面试题汇总解答,2022-2022阿里巴巴安卓面试真题解析
  13. gini函数和entropy 函数 数据分类效果对比
  14. Ubuntu挂载iso文件和配置apt本地源
  15. golang 常量 iota
  16. java连接mysql(java连接mysql的jar包)
  17. 0510课堂笔记--数组-面向对象
  18. 记录php调用小程序官方接口security.msgSecCheck检查文本违法违规内容方法
  19. ch340 win7 64位驱动下载 win10也可以用
  20. SpringBoot从入门到精通教程(二十七)- @Valid注解用法详解+全局处理器Exception优雅处理参数验证用法

热门文章

  1. 如何用Pygame写游戏(十七)
  2. 【CVPR2019】Workshops 研讨会列表及链接
  3. JMeter——并发测试工具类安装及使用
  4. python-函数-默认值传参
  5. Sql Server cdc变更捕获使用
  6. linx vim 文件操作 ubuntu server 软件源
  7. 数据库索引优化原理,索引的工作机制
  8. 雅虎宣布关闭游戏、Livetext、BOSS等服务
  9. 使用Lucene索引和检索POI数据
  10. jquery学习。。