"面向对象设计五大原则"和良性依赖原则在应付变化方面的作用。

SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)

单一职责原则(Single-Resposibility Principle)。"对一个类而言,应该仅有一个引起它变化的原因。"本原则是我们非常熟悉地"高内聚性原则"的引申,但是通过将"职责"极具创意地定义为"变化的原因",使得本原则极具操作性,尽显大师风范。同时,本原则还揭示了内聚性和耦合生,基本途径就是提高内聚性;如果一个类承担的职责过多,那么这些职责就会相互依赖,一个职责的变化可能会影响另一个职责的履行。其实OOD的实质,就是合理地进行类的职责分配。

开放封闭原则(Open-Closed principle)。"对外扩展开放,对内修改关闭。"本原则紧紧围绕变化展开,变化来临时,如果不必改动软件实体裁的源代码,就能扩充它的行为,那么这个软件实体设计就是满足开放封闭原则的。如果说我们预测到某种变化,或者某种变化发生了,我们应当创建抽象类来隔离以后发生的同类变化。在Java中,这种抽象是指抽象基类或接口;在C++中,这各抽象是指抽象基类或纯抽象基类。当然,没有对所有情况都贴切的模型,我们必须对软件实体应该面对的变化做出选择。

Liskov替换原则(Liskov-Substitution Principle)。"子类型必须能够替换掉它们的基类型。"本原则和开放封闭原则关系密切,正是子类型的可替换性,才使得使用基类型模块无需修改就可扩充。Liskov替换原则从基于契约的设计演化而来,契约通过为每个方法声明"先验条件"和"后验条件";定义子类时,必须遵守这些"先验条件"和"后验条件"。当前基于契的设计发展势头正劲,对实现"软件工厂"的"组装生产"梦想是一个有力的支持。

接口隔离原则(Interface-Segregation Principle)。"多个专用接口优于一个单一的通用接口。"本原则是单一职责原则用于接口设计的自然结果。一个接口应该保证,实现该接口的实例对象可以只呈现为单一的角色;这样,当某个客户程序的要求发生变化,而迫使接口发生改变时,影响到其他客户程序的可能生性小。

依赖倒置原则(Dependecy-Inversion Principle)。"抽象不应依赖于细节,细节应该依赖于抽象。"本原则几乎就是软件设计的正本清源之道。因为人解决问题的思考过程是先抽象后具体,从笼统到细节,所以我们先生产出的势必是抽象程度比较高的实体,而后才是更加细节化的实体。于是,"细节依赖于抽象"就意味着后来的依赖于先前的,这是自然而然的重用之道。而且,抽象的实体代表着笼而统之的认识,人们总是比较容易正确认识它们,而且本身也是不易变的,依赖于它们是安全的。依赖倒置原则适应了人类认识过程的规律,是面向对象设计的标志所在。

良性依赖原则。"不会在实际中造成危害的依赖关系,都是良性依赖。"通过分析不难发现,本原则的核心思想是"务实",很好地揭示了极限编程(Extreme Programming)中"简单设计"各"重构"的理论基础。本原则可以帮助我们抵御"面向对象设计五大原则"以及设计模式的诱惑,以免陷入过度设计(Over-engineering)的尴尬境地,带来不必要的复杂性。

最新文章

  1. 初识 Sql Server存储过程
  2. ajaxFileUpload插件
  3. jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
  4. QTableWidget控件总结
  5. 如何让数据库在每天的某一个时刻自动执行某一个存储过程或者某一个sql语句
  6. VS2015详细安装步骤
  7. nginx源码学习----内存池
  8. SqlServer中quotename用法与实例
  9. OpenCV+QT开发环境(一):Windows环境
  10. xcode7下开发ios9等相关问题记录
  11. Java程序员25个必备的Eclipse插件
  12. HDU_2553——n皇后问题,作弊
  13. discuz网站数据库迁移
  14. linux文件分割(将大的日志文件分割成小的)【转载】
  15. hi-nginx-1.3.4编译安装
  16. mssql server for docker on MacOs
  17. 实现lodash.get功能
  18. Unity4.3.4 安装出现 pattern not found
  19. 分析轮子(五)- Vector.java
  20. 多核CPU配合负载均衡可以这样用,为老板省点钱

热门文章

  1. python if-elif-else 判断
  2. Python中open函数怎么操作文件--9
  3. Android Compose的Window Insets
  4. LockSupport、wait()、notify()
  5. webbrowser 强制 ie11
  6. 常见消息处理api
  7. 关于tx:method和pointcut中的方法,即事务管理中的方法和切入点表达式中的方法具体如何执行
  8. K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股
  9. Python--操作列表
  10. linux_18