原作者 Robert C. Martin

原文:http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf

引用页:http://www.objectmentor.com/resources/publishedArticles.html

4 Interface Segregation Principle(ISP,接口隔离原则)

Many client specific interfaces are better than one general purpose interface.

多个各客户端相关的接口优于一个通用接口。

ISP是另一种使组件得以广泛应用的技术。(The ISP is another one of the enabling technologies supporting component substrates such as COM).

这个原则本质很简单:如果你有一个类为多个客户提供服务,与其直接使用该类,不如为各客户的应用分别创建接口,再让这个类继承这些接口。好处是类的修改对这些客户透明,只要维持接口不变即可,即使以后这些接口由不同的类来实现,客户端也不会感知或需要修改。本质还是功能的内聚性。每个客户使用的功能有一定的内聚性,按这种内聚性来实现接口,比一个大一统的胖接口,更能准确表达接口要实现的功能,也更便于修改接口。

5 Principle of Package Architecture

在设计中类是必须的,但仅有类对设计是不够的。更大粒度上的包可以帮助我们让类更有序。但我们如何决定将哪些类放入哪些包中?下面三则包的内聚性准则可以参考。

1) The Release Reuse Equivalency Principle(REP)

The granule of reuse is the granule of release.

重用粒度即发布粒度。

2) The Common Closure Principle(CCP)

Classes that change together, belong together.

一起变动的类组织在一起

3) The Common Reuse Principle(CRP)

Classes that aren't reused together should not be grouped together.

不在一起重用的类不要组织在一起。

6 The Package Coupling Principles

1) The Acylic Dependencies Principle(ADP)

The dependencies between packages must not form cycle

包之间不得出现循环依赖。

循环依赖对工程的破坏性每个做过上规模项目的人都会深有体会。那么如何解除循环依赖,如原来A中部分功能要依赖于B,而要在B中加入的新功能又依赖于A,怎么办?有几个简单的办法:

a.将要加入的新功能放到一个新的包中去,使其依赖于A与B,这要就是一个依赖链,避免了循环依赖。

b.将A,B中为对方所依赖的功能抽象成接口,然后A,B都针对接口编程,这样A,B都只依赖于抽象接口,而没有了彼此的依赖。

2) The Stable Dependencies Principle

Depend in the direction of stability.

沿着稳定性的方向依赖。

即易变的模块依赖于稳定的模块,而非相反。何者易变?何者罕变?无依赖者罕变,依赖多者易变,盖其依赖者一变,其多相应变矣。

3) The Stable Abstraction Principle

Stable package should be abstract packages.

依赖链中低端难变,而上端易变。但按OCP原则,低端虽难变但不应难于扩展。故其应高度抽象以备扩展之需。

具象易变,抽象罕变。抽象居下以定架构,具象居上以扩功能。故具象依赖于抽象,而非抽象依赖于具象。

转载于:https://www.cnblogs.com/MichaelPeng/archive/2009/11/14/1603142.html

面向对象设计原则-Principles and Patterns读书笔记三相关推荐

  1. Robert C. Martin The Principles of OOD 面向对象设计原则

    本文由来自美国业界大牛--Robert C. Martin(俗称"Bob大叔) 发布在 butunclebob.com 上,已获得翻译授权. 英文原文链接:http://butunclebo ...

  2. 《设计模式:可复用面向对象软件的基础》——面向对象设计原则、创建型模式(笔记)

    文章目录 二.面向对象设计原则(补充) 2.1 重新认识面向对象 2.2 面向对象设计原则 2.2.1 依赖倒置原则(DIP) 2.2.2 开放封闭原则(OCP) 2.2.3 单一职责原则(SRP) ...

  3. uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则

    1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...

  4. 面向对象设计原则_面向对象的设计原则

    面向对象设计原则 Programming is fun until you have to incorporate a new requirement that changes the whole d ...

  5. 技术图文:01 面向对象设计原则

    01 面向对象设计原则 知识结构: 一碟开胃的小菜 小菜今年计算机专业大四了,学了不少软件开发方面的东西,也学着编了些小程序,踌躇满志,一心要找一个好单位.当投递了无数简历后,终于收到了一个单位的面试 ...

  6. 代码质量评判标准、设计模式、面向对象设计原则速查表

    文章目录 代码质量评判标准 软件腐化的原因 提高系统可复用性的几点原则 可维护性与可复用性并不完全一致 面向对象设计原则 1. 面向对象设计的六大设计原则表 2. 图解面向对象涉及的六大原则 1. 开 ...

  7. UML中GRASP面向对象设计原则

    GRASP原则(General Responsibility Assignment Software Patterns)基于职责分配的的面向对象设计原则,它是面向对象设计的基本原则. 主要包括9个原则 ...

  8. 《监控运维实践:原则与策略》读书笔记

    原文地址:https://www.lujun9972.win/blog/2022/03/17/<监控运维实践:原则与策略>读书笔记/index.html 目录 书本信息 监控实施的原则 反 ...

  9. 万字长文,精讲面向对象设计原则,一起练内功

    本文摘Robert C Martion <架构整洁之道> 在我们追逐互联网高并发技术时,应该提前打好基础.面向对象设计原则是成为架构的必由之路,通读此文,反复咀嚼,定会受益无穷. 通常来说 ...

最新文章

  1. 【python】基础知识
  2. AV1生态系统更新:2019年6月
  3. 简单工厂抽象工厂工厂方法_让工厂美丽
  4. python sns绘制回归线_Python数分实战:员工流失情况预测
  5. UML类图操作(二)
  6. 游戏建模用什么软件,学游戏建模哪里好?
  7. 2014浙大ACM网络省赛-----Talented Chef问题(Problem -C)
  8. 应用华云对象存储服务实现网站存储的平滑迁移实践
  9. T-SQL连接查询,基础连接理解
  10. PHPCMS2008调用Uchome系统[空间之星]GET语句
  11. mysql常见的存储引擎
  12. DCSTFN(使用深度卷积网络融合高时空遥感图像)
  13. Office:手动卸载 Office 系统
  14. 人工智能与算法学习总结报告!(珍藏版)
  15. 一直激励我的一个故事--驴子的故事
  16. 服务器过载保护(上篇)——过载介绍
  17. Scikit-learn学习系列 | 1. sklearn的简要使用介绍与数据集获取
  18. 20145325张梓靖 《网络对抗技术》 Web安全基础实践
  19. android QCN备份还原方法
  20. SAP笑话 ABAP简称

热门文章

  1. OpenFOAM安装+ParaView安装+环境配置(deb直接安装详细记录-Ubuntu14.04+OpenFOAM4.1)
  2. rmi远程反序列化rce漏洞_Oracle WebLogic 反序列化远程命令执行漏洞预警
  3. c++排序函数_中式排名怎么做,你还在手动输入1、2、2、3?这组函数一秒搞定...
  4. php css错乱,css,html_css多行布局错乱,css,html - phpStudy
  5. 白盒测试和黑盒测试_黑盒测试与白盒测试的比较
  6. js css加载器,webpack的CSS加载器的使用
  7. html 编辑器 es6,小技巧:一行代码让浏览器瞬间变成临时编辑器
  8. python数据清理的实践总结_Python数据清洗实践
  9. find vba 模糊_VBA积木代码方案:实现多重查找、模糊查找、清除值
  10. python二维游戏示例_Python实现的井字棋(Tic Tac Toe)游戏示例