在所有的设计模式开篇中,总是说一个好的架构,或多或少都会有设计模式的出现。当然或多或少也会使用设计模式的相关原则:

SOLID+迪米尔原则


1.优化代码的第一步:单一职责原则

S:单一职责链原则:英文名称为Single Responsibility Principle(SRP)

定义:就一个类而言,应该仅有一个引起它变化的原因。通俗来说:一个类中应该有一组相关性很高的函数、数据的封装。但是在设计模式之禅中说这个说法的争议比较大,因为单一职责的划分界限并不是那么清晰的。就像明明知道数据库设计的时候要保持一条记录的原子性,但是为了方便后期操作的时候,不需要进行表连接而快速的获取到数据,会出现部分冗余的字段。


2.让程序更稳定、更灵活的:开闭原则

O:开闭原则:英文名称为:Open Close Principle(OCP),它是Java里面最基础的设计原则:

定义:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改是封闭的。

软件开发中最让人烦恼的不是产品设计出来的功能不能实现,而是实现出来之后,下个版本要对本功能进行修改。但是如果我们修改原先的代码不能保证原先软件模块的正确性。如果我们开发的是第三方的Jar包,已经将jar给其它客户了,下个版本更新的时候要让用户所有用到jar文件的地方都要修改这很明显是十分不合理的,此时开闭原则显得非常重要。


3.构建扩展性更好的系统:里氏替换原则

L:里氏替换原则:英文名称为:Liskov Substitution Principle(LSP)

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

面向对象三大特点:封装、继承、多态。李氏替换原则依赖于继承与多态。通俗的讲:只要父类能出现的地方,其子类一定可以出现,而且替换成子类也不会产生任何异常和错误,调用者根本就不需要知道当前调用的对象是子类还是父类。反之则不一定成立,有子类出现的地方,父类未必能适应。总结两个字就是:抽象。

里氏替换原则的核心就是抽象,抽象又依赖于继承这个特性。在OOP编程中:继承的优缺点相当明显:

优点:

1)代码重用,减少创建类的成本,每个子类都拥有父类的属性和方法

2)子类和父类基本相似,但是又比父类多了自己的特征

3)提高代码的可扩展性

继承的缺点:

从侧面上看,继承的优点基本上也就是它的缺点:

1)继承是侵入式的,只要继承就必须拥有父类的所有属性和方法。(连拒绝接收遗产的资格都没有)

2)因为子类继承了父类属性和方法,可能导致子类代码冗余。

开闭原则和里氏替换原则是相互依靠的,通过里氏替换来达到对扩展开放,对修改关闭的效果。


4.系统有更高的灵活性:接口隔离原则

I:接口隔离:InterfaceSegregation Principle(ISP)

定义:类间的依赖关系应该建立在最小的接口上。通俗的讲:让客户端依赖的接口尽可能的小


5.让项目拥有变化的功能:依赖倒置原则

D:依赖倒置:Dependence Inversion Principle(DIP)重点在解耦上面

定义:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口和抽象类产生的。

更好的扩展性:迪米特原则

6.迪米特原则:Law of Demeter(LOD)

定义:一个对象应该对其它对象有最少的了解。通俗的说,一个类对自己需要耦合或者调用的类知道的最少,类的内部如何实现与调用者或者依赖者没有关系,调用者或者依赖者只需要知道它需要的方法即可,其它的一概不用管。类与类之间的关系越密切,耦合度越大,当一个类放生改变的时候,对另一个类影响也越大。

转载于:https://www.cnblogs.com/chun-jiang-chao-de-gu-shi/p/5375534.html

Java设计模式开篇相关推荐

  1. 【java设计模式】-00目录

    开篇 [java设计模式]-01设计模式简介 创建型模式: [java设计模式]-02工厂模式(Factory Pattern) [java设计模式]-03抽象工厂模式(Abstract Factor ...

  2. 初探Java设计模式1:创建型模式(工厂,单例等)

    Java 设计模式 一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混.自认为本文还是写得不错的,花了不少心思来写这文章和做图,力求让读者真的能看着简 ...

  3. Java设计模式之工厂方法模式与抽象工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...

  4. java备忘录模式应用场景_图解Java设计模式之备忘录模式

    图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...

  5. JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

  6. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  7. JAVA 设计模式 享元模式

    用途 享元模式 (Flyweight) 运用共享技术有效地支持大量细粒度的对象. 享元模式是一种结构型模式. 结构 图-享元模式结构图 Flyweight : 它是所有具体享元类的超类或接口,通过这个 ...

  8. java设计模式 观察者模式_理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的"观察者模 ...

  9. Java设计模式-七大设计原则

    Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...

最新文章

  1. JavaAgent 实现字节码注入
  2. 使用Vim+Ctags+Cscope阅读源代码
  3. Java 基础学习-链接
  4. 开源一个友盟 for android 操作的封装包
  5. hg 全局密码配置。
  6. 对linux做一个简单介绍,对“Fork”做一个技术方面的简介
  7. touchstart与click同时触发
  8. 内部导线拉力测试_端子拉脱力的正确测试方法及标准
  9. android代码画出波浪球,Android绘制波浪曲线,效果很赞的。
  10. 机器视觉:偏振镜光学原理和在机器视觉中的应用
  11. 9.linux ntp服务器搭建
  12. Android Studio导入安卓源码
  13. python开发一个PC屏幕监控软件(2000块的道德底线)
  14. QT开源网站和相关资料
  15. Mac升级系统后,Android Studio 不能用问题
  16. java实现pdf转为word
  17. 数据分析师8大实用能力实战培养课程
  18. Emacs 显示左侧行号
  19. 康奈尔大学的计算机专业怎么样,美国名校康奈尔大学计算机专业介绍
  20. 一分钟了解蒙特卡洛方法

热门文章

  1. java线程间通信 实例_JAVA-初步认识-第十四章-线程间通信-示例
  2. scp命令密码写命令里_dos命令net图文教程,net user添加删除用户修改密码批处理脚本...
  3. python pip工具命令_转载 Python 安装setuptools和pip工具操作方法(必看)
  4. c语言代码表白_程序员教你表白:C/C++打造浪漫表白程序,找女朋友从现在开始...
  5. ubuntu安装redis_在Ubuntu上安装Redis
  6. jqueryui时间插件_jQueryUI工具提示插件
  7. lighttpd安装_如何在Ubuntu服务器上安装Lighttpd
  8. tomcat7-maven-plugin-用于部署WAR的Tomcat Maven插件
  9. msbuild.exe编译c#项目
  10. 制造业中人工智能的应用有哪些?