专栏首页java一日一条面向对象设计的六大原则

面向对象设计的六大原则

1)Open-Close Principle(OCP),开-闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制。这是最重要也是最为抽象的原则,基本上我们所说的Reusable Software既是基于此原则而开发的。其他的原则也是对它的实现提供了路径。

2)Liskov Substituition Principle(LSP),里氏代换原则,很严格的原则,规则是“子类必须能够替换基类,否则不应当设计为其子类。”也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类;

3)Dependence Inversion Principle(DIP),依赖倒换原则,“设计要依赖于抽象而不是具体化”。换句话说就是设计的时候我们要用抽象来思考,而不是一上来就开始划分我需 要哪些哪些类,因为这些是具体。这样做有什么好处呢?人的思维本身实际上就是很抽象的,我们分析问题的时候不是一下子就考虑到细节,而是很抽象的将整个问题都构思 出来,所以面向抽象设计是符合人的思维的。另外这个原则会很好的支持OCP,面向抽象的设计使我们能够不必太多依赖于实现,这样扩展就成为了可能,这个原则也是另 一篇文章《Design byContract》的基石。

4)Interface Segregation Principle(ISP),接口隔离原则,“将大的接口打散成多个小接口”,这样做的好处很明显。

5)Composition/Aggregation Reuse Principle(CARP),合成/聚合复用原则,设计者首先应当考虑复合/聚合,而不是继承(因为它很直观,第一印象就是“哦,这个就是OO 啊”)。这个就是所谓的“Favor Composition over Inheritance”,在实践中复合/聚合会带来比继承更大的利益,所以要优先考虑。

6)Law of Demeter or Least Knowlegde Principle(LoD or LKP),迪米特法则或最少知识原则,这个原则首次在Demeter系统中得到 正式运用,所以定义为迪米特法则。它讲 的是“一个对象应当尽可能少的去了解其他对象”。也就是又一个关于如何松耦合(Loosely-Coupled)的法则。

本文分享自微信公众号 - java一日一条(mjx_java)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 10+ 实用的 JavaScript 调试小技巧

    除了console.log,debugger就是另一个我很喜欢的快速调试的工具,将debugger加入代码之后,Chrome会自动在插入它的地方停止,很像C或者...

    哲洛不闹
  • 115个Java面试题和答案——终极列表(下)

    第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDB...

    哲洛不闹
  • 115个Java面试题和答案——终极列表(下)

    第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDB...

    哲洛不闹
  • android mtp简介

    经作者同意,转发我们公司MTP专家同事huirong的一篇文章。大家也可在程序员第5期看到。 MTP in Android MTP的全称是Media Tra...

    xiangzhihong
  • Dropbox推Office协同工具

    4月10日消息,据国外媒体报道,云服务商Dropbox周三发布一系列新移动应用,并推出能增进与微软Office软件协同工作的Project Harmony工具。...

    静一
  • 使用Python+selenium实现第一个自动化测试脚本

    此处我选用python3.6+selenium3.0,均用最新版本,以适应未来需求。

    砸漏
  • WordPress主题中加载jQuery的最佳方法

    一般来说,在html页面底部 (也就是</body>之前)引入JavaScript,如jQuery 和 jQuery插件是个不错的做法。原因很简单,HTTP /...

    丘壑
  • Web前端开发推荐阅读书籍、学习课程下载

    学校里没有前端的课程,那如何学习JavaScript,又如何使自己成为一个合格的前端工程师呢?

    慕白
  • Python|自动化实现学习通登录

    最近小编在学习python自动化处理网页,因为一直在使用学习通,因此写了一个python自动化网页登录学习通的简单程序,因为才入门,不足之处希望读者能够提出。

    算法与编程之美
  • 12 Julia科学计算

    跟Python中的pandas的用法很像,相信用过Pandas的朋友上手应该无压力

    猫叔Rex

扫码关注云+社区

领取腾讯云代金券