6大原则:

  • 单一职责原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则
  • 迪米特法则
  • 开闭原则

一、单一职责原则

定义:应该有且仅有一个原因引起类的变更

带来的好处:

  • 类的复杂性降低,实现什么职责有清晰明确的定义
  • 可读性提高
  • 可维护性提高
  • 变更引起的风险降低

对于单一职责原则,建议接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

二、里氏替换原则

继承的优点:

  • 代码共享,减少创建类的工作量,子类拥有父类的属性和方法
  • 提供代码重用性
  • 提供代码扩展性
  • 提供产品或项目开放性

继承缺点:

  • 继承是侵入性的,只要继承,就必须要继承父类的属性和方法
  • 降低代码的灵活性,子类必须拥有父类的属性和方法
  • 增加了耦合性,父类的常量、变量和方法被修改时,必须要考虑子类的修改

怎样才能让“利”的因素发挥到最大的作用,同时减少“弊”带来的麻烦?

解决方法是引入里氏替换原则。

定义:所有引用基类的地方必须能透明地使用其子类的对象。

采用里氏替换原则的目的是增强程序健壮性,版本升级时也可以保持很好的兼容性。增加新的子类,原有的子类还可以正常运行。

在实际项目中,每个子类对应不同的业务含义,将父类作为参数传递给子类完成不同的业务,非常完美。

三、依赖倒置原则

定义:

高层模块应该依赖低层模块,两者都应该依赖抽象

抽象不应该依赖细节

细节应该依赖抽象

java语言中的表现:

模块间的依赖通过抽象产生,实现类之间不产生依赖关系,其依赖关系是通过接口或抽象类产生。

接口和抽象类不依赖实现类

实现类依赖接口或抽象类

更加精简的定义“面向接口编程”。

依赖倒置原则的好处:

减少类之间的耦合性,提高系统的稳定性,降低并行开发引起风险,提高代码可读性和可维护性

四、接口隔离原则

定义:

  • 客户端不应该依赖它不需要的接口
  • 类间的依赖应该建立在最小的接口上

(要求接口细化,接口纯洁,接口尽量细化,同时接口中的方法尽量少)

五、迪米特法则

迪米特法则,也称最少知道原则。

定义:

一个对象应该对其它对象最少的了解。一个类,应该对自己需要耦合、调用的类知道的最少。

好处:

迪米特法则的核心观念是类间解耦,弱耦合,只有弱耦合以后,类的复用率才可以提高。

六、开闭原则

定义:

一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。

好处:

  • 增强系统稳定性
  • 提高复用性
  • 提高可维护性

JAVA设计模式-设计原则的更多相关文章

  1. Java设计模式六大原则-2

    Java设计模式六大原则-2 做Java程序开发的每天都在使用JDK,Spring,SpringMvc,Mybatis,Netty,MINA等框架,但很少有人懂得背后的原理.即使打开跟下原码也是一头雾 ...

  2. Java设计模式六大原则-1

    Java设计模式六大原则-1 做Java程序开发的每天都在使用JDK,Spring,SpringMvc,Mybatis,Netty,MINA等框架,但很少有人懂得背后的原理.即使打开跟下原码也是一头雾 ...

  3. 最简单直接地理解Java软件设计原则之开闭原则

    写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...

  4. java面向对象设计原则

    原则1:DRY(Don't repeat yourself) 即不要写重复的代码,而是用"abstraction"类来抽象公有的东西.如果你需要多次用到一个硬编码值,那么可以设为公 ...

  5. Java设计模式六大原则

    一.单一职责原则 单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小.单一职责原则定义如下: 单一职责原则(Single Responsibility Principle, SRP):一个 ...

  6. Java设计模式六大原则之场景应用分析

    定义:不要存在多于一个导致类变更的原因. 通俗的说.即一个类仅仅负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而须要改动类T时,有可能会导致原本执行正 ...

  7. Java六大设计原则

    类的设计原则     依赖倒置原则-Dependency Inversion Principle (DIP) 里氏替换原则-Liskov Substitution Principle (LSP) 接口 ...

  8. Java 设计模式六原则及23中常用设计模式

    一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...

  9. 设计模式-设计原则(Design Principle)

    本文由@呆代待殆原创,转载请注明出处. 写在前面:所谓设计原则并不是一定要遵守的法则,只是一种建议,因为保持这些原则本身会有一定代价,若是这些代价超过了带来的好处就得不偿失了,所以一切还是以简单为准. ...

随机推荐

  1. jQuery选择器(转)

    原文:http://www.cnblogs.com/qinwang913/p/3444135.html 一.基本分类 jQuery选择器大致可以分为两类,基本选择器和过滤选择器,总体结构体系如下:   ...

  2. 【Vue实战之路】一、Vue-cli入门及Vue工程目录全解。

    全面的Vue-cli学习,这一篇就够了! 一.下载 使用vue-cli前,需先安装node.js,node的安装就不赘述,不过在此需要注意: 1. node版本需在4.x以上,首推6.x以上版本(no ...

  3. 最长子回文字符串(Manacher’s Algorithm)

    # # 大佬博客: https://www.cnblogs.com/z360/p/6375514.html https://blog.csdn.net/zuanfengxiao/article/det ...

  4. android touch事件分发流程

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 三个方法:分发触摸事件dispatchTouchEvent.在触摸事件的时候onTouc ...

  5. CodeForces 794 G.Replace All

    CodeForces 794 G.Replace All 解题思路 首先如果字符串 \(A, B\) 没有匹配,那么二元组 \((S, T)\) 合法的一个必要条件是存在正整数对 \((x,y)\), ...

  6. BZOJ4205 : 卡牌配对

    对于两张卡牌,如果存在两种属性值不互质,则可以匹配. 只考虑200以内的质数,一共有46个,可以新建3*46*46个点来表示一类属性值中有这两种质数的卡牌. 然后对于每张卡牌,枚举它的质因子,最多只有 ...

  7. ThreadLocal 详解

    什么是ThreadLocal 根据JDK文档中的解释:ThreadLocal的作用是提供线程内的局部变量,这种变量在多线程环境下访问时能够保证各个线程里变量的独立性. 从这里可以看出,引入Thread ...

  8. Vue项目开发之打包后背景图片路径错误的坑

    在开发vue项目的过程中,使用浏览器进行预览的时候所有图片的路径是没有任何问题的,但是在打包后传到服务器上,在微信端查看背景图片时,background的图片竟然不显示,img标签里的图片却是正常展示 ...

  9. 用 consul + consul-template + registrator + nginx 打造真正可动态扩展的服务架构

        https://mp.weixin.qq.com/s?src=3&timestamp=1503654544&ver=1&signature=UcJdgd4vgt*3AR ...

  10. MEF框架简介

    下面主要介绍一下MEF的架构,希望从总体上有所了解,更改OpenExpressApp后我会再写篇文章介绍一下如何在OpenExpressApp中使用MEF的. 主要示意图 各种Export提供者从目录 ...