JAVA设计模式-设计原则
6大原则:
- 单一职责原则
- 里氏替换原则
- 依赖倒置原则
- 接口隔离原则
- 迪米特法则
- 开闭原则
一、单一职责原则
定义:应该有且仅有一个原因引起类的变更
带来的好处:
- 类的复杂性降低,实现什么职责有清晰明确的定义
- 可读性提高
- 可维护性提高
- 变更引起的风险降低
对于单一职责原则,建议接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。
二、里氏替换原则
继承的优点:
- 代码共享,减少创建类的工作量,子类拥有父类的属性和方法
- 提供代码重用性
- 提供代码扩展性
- 提供产品或项目开放性
继承缺点:
- 继承是侵入性的,只要继承,就必须要继承父类的属性和方法
- 降低代码的灵活性,子类必须拥有父类的属性和方法
- 增加了耦合性,父类的常量、变量和方法被修改时,必须要考虑子类的修改
怎样才能让“利”的因素发挥到最大的作用,同时减少“弊”带来的麻烦?
解决方法是引入里氏替换原则。
定义:所有引用基类的地方必须能透明地使用其子类的对象。
采用里氏替换原则的目的是增强程序健壮性,版本升级时也可以保持很好的兼容性。增加新的子类,原有的子类还可以正常运行。
在实际项目中,每个子类对应不同的业务含义,将父类作为参数传递给子类完成不同的业务,非常完美。
三、依赖倒置原则
定义:
高层模块应该依赖低层模块,两者都应该依赖抽象
抽象不应该依赖细节
细节应该依赖抽象
java语言中的表现:
模块间的依赖通过抽象产生,实现类之间不产生依赖关系,其依赖关系是通过接口或抽象类产生。
接口和抽象类不依赖实现类
实现类依赖接口或抽象类
更加精简的定义“面向接口编程”。
依赖倒置原则的好处:
减少类之间的耦合性,提高系统的稳定性,降低并行开发引起风险,提高代码可读性和可维护性
四、接口隔离原则
定义:
- 客户端不应该依赖它不需要的接口
- 类间的依赖应该建立在最小的接口上
(要求接口细化,接口纯洁,接口尽量细化,同时接口中的方法尽量少)
五、迪米特法则
迪米特法则,也称最少知道原则。
定义:
一个对象应该对其它对象最少的了解。一个类,应该对自己需要耦合、调用的类知道的最少。
好处:
迪米特法则的核心观念是类间解耦,弱耦合,只有弱耦合以后,类的复用率才可以提高。
六、开闭原则
定义:
一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。
好处:
- 增强系统稳定性
- 提高复用性
- 提高可维护性
JAVA设计模式-设计原则的更多相关文章
- Java设计模式六大原则-2
Java设计模式六大原则-2 做Java程序开发的每天都在使用JDK,Spring,SpringMvc,Mybatis,Netty,MINA等框架,但很少有人懂得背后的原理.即使打开跟下原码也是一头雾 ...
- Java设计模式六大原则-1
Java设计模式六大原则-1 做Java程序开发的每天都在使用JDK,Spring,SpringMvc,Mybatis,Netty,MINA等框架,但很少有人懂得背后的原理.即使打开跟下原码也是一头雾 ...
- 最简单直接地理解Java软件设计原则之开闭原则
写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...
- java面向对象设计原则
原则1:DRY(Don't repeat yourself) 即不要写重复的代码,而是用"abstraction"类来抽象公有的东西.如果你需要多次用到一个硬编码值,那么可以设为公 ...
- Java设计模式六大原则
一.单一职责原则 单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小.单一职责原则定义如下: 单一职责原则(Single Responsibility Principle, SRP):一个 ...
- Java设计模式六大原则之场景应用分析
定义:不要存在多于一个导致类变更的原因. 通俗的说.即一个类仅仅负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而须要改动类T时,有可能会导致原本执行正 ...
- Java六大设计原则
类的设计原则 依赖倒置原则-Dependency Inversion Principle (DIP) 里氏替换原则-Liskov Substitution Principle (LSP) 接口 ...
- Java 设计模式六原则及23中常用设计模式
一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...
- 设计模式-设计原则(Design Principle)
本文由@呆代待殆原创,转载请注明出处. 写在前面:所谓设计原则并不是一定要遵守的法则,只是一种建议,因为保持这些原则本身会有一定代价,若是这些代价超过了带来的好处就得不偿失了,所以一切还是以简单为准. ...
随机推荐
- 【转】ElasticSearch之定时删除数据
有的时候我们在使用ES时,由于资源有限或业务需求,我们只想保存最近一段时间的数据,所以有如下脚本可以定时删除数据 delete_es_by_day.sh #!/bin/sh # example: in ...
- Luogu P3957 跳房子
题面 跳房子,也叫跳飞机,是一种世界性儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上.每个格子内有一 ...
- Windows自动联网修复系统损坏文件
sfc修复: Win+X---命令提示符(管理员)---sfc /scannow---Enter可以查看是否存在系统文件损坏等问题 以管理员权限运行命令提示符,执行“dism /online /cle ...
- IntelliJ IDEA快捷键:Shift+Esc
Shift+Esc moves the focus to the editor and also hides the current (or last active) tool window. 将焦点 ...
- Spark优化之gc
对于官方Programming Guides的GC优化一节做了阅读. 在这里记录一下我的理解,可能记录的比较混乱没有条理: 我理解其实GC优化的主要目的就是在你的任务执行中使用更少的内存,进行更少的g ...
- Java字符串跟ASCII码互转
1.由于项目中遇到,在服务器端起的jar包程序,给前台发消息后,前段收到的消息出现乱码情况,所以采取在后才发消息前先把消息字符串转成ASCII码再发往前台,前台采取在收到后台消息先把ASCII码转成字 ...
- 关于ImportError: libssl.so.10: cannot open shared object file: No such file or directory unable to load app 0 (mountpoint='') (callable not found or import error)
一.问题描述 在亚马逊云服务器使用Nginx+uwsgi部署django项目时,项目可以使用python manage.py runserver正常运行,uwsgi测试也没问题,Nginx也正常启动, ...
- Ubuntu美化及配置,常见问题解决方案
安装符合审美观,并且具有可用性的Ubuntu桌面,需要耗费一些时间与精力不过,相信我,这值得去做,你会享受这中间的过程,以及最后的成果 首先,我推荐安装的软件列表如下,在安装前,需要先执行以下的步骤: ...
- httpclient初步封装
Http通信方式:HttpURLConnection和HttpClient HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便HttpClient就是一个增强版的 ...
- 【Ray Tracing The Next Week 超详解】 光线追踪2-1
Preface 博主刚放假回家就进了医院,今天刚完事儿,来续写第二本书 Ready 我们来总结一下上一本书的笔记中我们的一些规定 1. 数学表达式 我们采用小写粗黑体代表向量,大写粗黑体代表矩阵, ...