本文由@呆代待殆原创,转载请注明出处。

写在前面:所谓设计原则并不是一定要遵守的法则,只是一种建议,因为保持这些原则本身会有一定代价,若是这些代价超过了带来的好处就得不偿失了,所以一切还是以简单为准。

原则一:分离变与不变的部分。

定义:找出代码中会发生变化的部分,并将其和保持不变的部分分离。

作用:提升可维护性。将会变化的部分分离后,在以后的修改过程中就不会影响到其他不变的部分。

原则二:面向接口编程。

定义:面向接口编程,而不是面向某个实现。

作用:降低耦合。这里的接口有多个含义,并不仅仅只java中的interface,更准确的表达应该是面向超类编程。这样的话只要接口不发生改变,依赖接口的部分就不用发生改变,我们都知道,接口发生改变的可能性比接口的某个实现发生改变的可能性小很多。

原则三:开闭原则(The Open-Closed Principle)。

定义:类需要支持扩展而拒绝修改。

作用:增加可修改性和可维护性。

原则四:Dependency Inversion Principle(依赖倒置原则,之后简称DIP)。

定义:不要依赖实例(concrete classes)编程,依赖抽象(abstractions,指依赖抽象类和接口)。

关于倒置(inversion)的理解:通常我们的高层组件都会依赖于低层组件(指某个低层具体实例类),而DIP是不允许这样的,在DIP的指导下,我们会创建一个抽象类,让它处于高层组件与低层组件之间,打破这种依赖,这时不仅高层组件会依赖于这个抽象类,低层组件会依赖于这个所处位置比它高层的抽象类,所以会出现“倒置”这个说法。

此原则的几个指导方针(并不是一定要准守,只是在开发的时候当成一个参考而已)

1,不要有指向一个具体实例(concrete class)的引用。

2,不要有从具体实例(concrete class)派生出的类。

3,不要覆盖父类中已经实现的方法。

4,低层组件尽量都要有共同的接口或者抽象类。

与原则二的区别:比原则二更加严格,它增加了高层组件不能直接依赖低层组件这一条。

作用:降低耦合。只要定义好了高层组件和低层组件间的接口,他们的开发可以同步进行,在多人开发中的意义也很大。

原则五:最少至少原则(The Principle of Least Knowledge)[又称迪米特法则(Law of Demeter)]

定义:一个对象应该对其他对象保持最少的了解。

此原则的几个指导方针

1,只调用自己的成员方法。

2,只调用当做参数传递进来的对象的成员方法。

3,只调用自己的方法实例化的对象的成员方法。

4,只调用组合对象(成员变量的一部分)的成员方法。

作用:降低复杂度,提高可维护性。

原则六:好莱坞原则(The Hollywood Principle)

定义:别调用我们,我们会调用你。

作用:防止依赖腐败(dependency rot),当高层组件和低层组件组件相互依赖的时候,通常组件之间的关系会过于复杂,这时,就可以运用这个原则,拒绝低层组件调用高层组件,而是等待高层组件来调用低层组件,这样可以降低编程的复杂程度。

原则七: 单一责任原则(Single Responsibility)

定义:一个类只有一个引起变化的原因

作用:高内聚,提高可维护性。每个类只有一个职责,只有这个职责发生改变的时候这个类才应该被修改。

参考资料:《Head First 设计模式》

转载于:https://www.cnblogs.com/coffeeSS/p/5413512.html

设计模式-设计原则(Design Principle)相关推荐

  1. 设计模式——设计原则

    设计模式--六种设计原则 1. 开闭原则:对扩展开放,对修改闭合 对扩展开放:有新的需求或变化时,通过现有代码进行扩展,来适应新的情况 对修改闭合:设计一旦完成,就可以独立完成工作,不对已有的代码进行 ...

  2. 模块递归拆分法: 设计模式 设计原则,复杂层次设计举例。系统重构 装饰模式,门面模式,代理模式

    程序员最牛逼的能力是模块拆分能力, 然后才能利用模块依赖的工具,java 9 或者 runtime期的osgi ,其他maven插件,maven build期. 其他idea插件,类似阿里云的代码规范 ...

  3. JavaScript -- 设计模式 设计原则

    设计模式有很多,这些设计模式的出现是由准则或者说有根据的,不是平白无故出现的,下面我们就来认识一下这些设计原则. 在此以前,我想说一下,看这篇文章的读者应该都是前端工程师或者使用JS编程语言的程序员, ...

  4. 设计模式-设计原则之里氏代换原则

    设计原则之里氏代换原则 里氏代换原则 案例(正方形不是长方形) 案例改进 里氏代换原则 里氏代换原则是面向对象设计的基本原则之一. 里氏代换原则:任何基类可以出现的地方,子类一定可以出现. 通俗理解: ...

  5. JAVA设计模式-设计原则(三)里氏代换原则

    1.概念  任何基类可以出现的地方,子类一定可以出现. 子类对象 能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏. 2.为什么使用里氏替换原则 继承优点:     ...

  6. 设计模式-设计原则-开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段...

    开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段,它们相辅相成,相互补充,目标一致,只是分析问题时所站角度不同而已. 转载于:https://www.cnblogs.com/jiangtao12 ...

  7. 设计模式-设计原则之迪米特原则

    例子 假设老板给项目组长下达一个任务,让其去查询课程的数量 代码 public class Course {} public class TeamLeader {public void checkNu ...

  8. .NET 云原生架构师训练营(设计原则设计模式)--学习笔记

    ▲ 点击上方"DotNet NB"关注公众号 回复"1"获取开发者路线图 学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第180篇原创文章 ...

  9. UML ~ Unified Modeling Language ~ 统一建模语言。+ 软件设计原则。

    UML ~ Unified Modeling Language ~ 统一建模语言. 文章目录 UML ~ Unified Modeling Language ~ 统一建模语言. what. 类图. 类 ...

最新文章

  1. SQL提取表中某列字符长度为2的所有记录
  2. 手机微站webapp
  3. Non-local Neural Networks:非局部神经网络
  4. SAP 电商云 Spartacus UI product 明细页面的路由配置
  5. mysql主从配置对解决并发有用_MySQL主从配置,读写分离
  6. NumpyML : Linear Regression
  7. Google cloud 存储 Storage
  8. cdh安装hadoop组件后一些常用设置
  9. Idea+Mybatis源码构建
  10. 快速批量下载 B 站视频
  11. java基础周报_java第四周周报
  12. 离职当天,删库跑路,京东到家程序员被判刑
  13. iis日志分析 seo必备技能
  14. Python量化编程如何判断均线数据是金叉还是死叉?-股市数据均线策略编程分析
  15. [附源码]计算机毕业设计基于springboot的高校资源共享平台
  16. seajs学习(6)----配置
  17. java 轻量级插件化框架_轻量级插件化框架——Small
  18. 小程序之mpvue使用
  19. oracle物化视图可以创建索引,oracle 物化视图及创建索引
  20. (附源码)spring boot火车票订票系统 毕业设计171538

热门文章

  1. 中文乱码各个浏览器的处理
  2. 如何定义视觉设计规范?
  3. 网页的一般布局(标题和脚注100%,内容宽度固定宽度px)
  4. python isalpha()
  5. 使用node来搭建简单的后台业务
  6. 日报 18/06/04
  7. 使用apply调用函数
  8. springmvc处理流程
  9. jquery 只能输入汉字
  10. Fiddler模拟Slow Network