设计原则名称

定  义

使用频率

单一职责原则(Single Responsibility Principle, SRP)

一个类只负责一个功能领域中的相应职责。

★★★★☆

开闭原则(Open-Closed Principle, OCP)

软件实体应对扩展开放,而对修改关闭。开闭原则的关键在于抽象化。

★★★★★

里氏代换原则(Liskov Substitution Principle, LSP)

所有引用基类对象的地方能够透明地使用其子类的对象【子类不应该覆盖父类的非抽象方法】。里氏代换原则是实现开闭原则的重要方式之一

★★★★★

依赖倒转原则(Dependence  Inversion Principle, DIP)

抽象不应该依赖于细节,细节应该依赖于抽象。是开闭原则的基础。【可以通过依赖注入的方式实现】

★★★★★

接口隔离原则(Interface Segregation Principle, ISP)

使用多个专门的接口,而不使用单一的总接口。【需要把控好接口的粒度】

★★☆☆☆

合成复用原则(Composite Reuse Principle, CRP)

复用时要尽量使用组合/聚合关系(关联关系),少用继承。

★★★★☆

迪米特法则(最少知道)(Law of Demeter, LoD)

一个软件实体应当尽可能少地与其他实体发生相互作用。

★★★☆☆

里氏代换原则

里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。需要注意以下几点:

(1)子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。

(2)尽量把父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法。

(3)子类不应该覆盖父类的非抽象方法(可以重载,但一定要调父类的方法)。

依赖倒转原则

在实现依赖倒转原则时,我们需要针对抽象层编程,而将具体类的对象通过依赖注入的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。

(1)构造注入是指通过构造函数来传入具体类的对象。

(2)设值注入是指通过Setter方法来传入具体类的对象。

(3)接口注入是指通过在接口中声明的业务方法来传入具体类的对象。

这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。

开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段。

接口隔离原则

(1)在使用接口隔离原则时,我们需要注意控制接口的粒度。

(2)接口不能太小。如果太小会导致系统中接口泛滥,不利于维护;

(3)接口也不能太大。太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。

一般而言,接口中仅包含为某一类用户定制的方法即可,不应该强迫客户依赖于那些它们不用的方法。

合成复用原则

通过继承来进行复用的主要问题在于继承复用会破坏系统的封装性。因为继承会将基类的实现细节暴露给子类,由于基类的内部细节通常对子类来说是可见的,所以这种复用又称“白箱”复用,如果基类发生改变,那么子类的实现也不得不发生改变;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性。

一般而言,如果两个类之间是“Has-A”的关系应使用组合或聚合,如果是“Is-A”关系可使用继承。"Is-A"是严格的分类学意义上的定义,意思是一个类是另一个类的"一种";而"Has-A"则不同,它表示某一个角色具有某一项责任。

Java设计模式详解

项目源码

微信公众号

> 更多资讯内容,欢迎扫描关注我的个人微信公众号!

java 设计模式原则_Java设计模式的七大原则相关推荐

  1. Java思想进阶之设计模式解析前篇(七大原则)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.七大原则 1.开闭原则 2.单一职责原则 3.接口隔离原则 4.依赖倒转原则 5.里氏替换原则 6.合成复用原则 ...

  2. 依赖倒转原则_Java设计模式的七大原则

    Java设计模式的七大原则 里氏代换原则 里氏代换原则是对"开-闭"原则的补充.实现"开-闭"原则的关键步骤就是抽象化.而基类与子类的继承关系就是抽象化的具体实 ...

  3. java 依赖倒置_JAVA设计模式之依赖倒转原则

    3.1 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,简称DIP)这个名字看着有点别扭,"依赖"还"倒置",这 ...

  4. 『设计模式』开发设计的七大原则,我做人还是挺有原则,那些代码呢?

    23种设计模式+额外常用设计模式汇总 (持续更新)23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式的七大原则: 单一职责原则SRP(Single Responsibility Princi ...

  5. java 设计模式 示例_Java设计模式–示例教程

    java 设计模式 示例 Design Patterns are very popular among software developers. A design pattern is a well- ...

  6. java外观设计修改_Java设计模式之外观模式和装饰器模式的设计(精选)

    前言 本篇来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接 ...

  7. java工厂方法_Java设计模式之工厂方法模式

    2.工厂方法模式 <设计模式之禅>中用神话故事女娲造人来比概述工厂方法模式. 女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时都会发生 ...

  8. java 设计模式 路由器_java设计模式2————工厂模式

    java设计模式2----工厂模式 1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展 ...

  9. java 行为模式_java设计模式--行为模式

    前言 行为模式是描述多个类与对象之间通过协作共同完成单个对象无法单独完成的任务. 行为模式分为: 类行为模式通过集成在类之间分派行为 对象行为模式通过组合或聚合在对象之间分配行为 行为模式: 模板方法 ...

最新文章

  1. 普元EOS开发积累第一篇(常见错误解决方法) 持续更新
  2. [Spring5]AOP底层原理
  3. nginx 电子书_13本免费的电子书,拿走,不谢
  4. 用 Python 和 werobot 框架开发公众号
  5. 分数加减法 http://acm.nyist.net/JudgeOnline/problem.php?pid=111
  6. 小米盒子4用u盘导入html文件格式,最新图文教程:小米盒子怎么用U盘安装第三方应用...
  7. linux内核实现ipsec,基于IPv6的IPSec原理分析和在Linux内核中的实现
  8. 实例标识助力您的应用迁上云端
  9. python生成三维点云包围盒
  10. 洛谷-明明的随机数(C语言实现)
  11. PayPal 更换汇率结算方式 降低手续费,PayPal汇率结算 改为 银行汇率结算
  12. 部队计算机专业培训申请书,《计算机专业奖学金申请书》.docx
  13. 弹性云主机利用云镜像克隆新开、迁移数据[云镜像]
  14. 网站SEO关键词优化技巧
  15. java哪一个可以编译,下列Java命令中,哪一个可以编译HelloWorld.java文件( )
  16. SkeyeRTMPLive多流媒体协议转无插件直播协议(RTMP)解决方案
  17. 中华英才网爬虫程序(3)-queue和threading模块的结合使用
  18. 叶酸修饰靶向性紫杉醇 PGA-TAXOL/羟基靶向修饰透明质酸接枝姜黄素 OH-HA-CUR/羧基靶向修饰透明质酸接枝姜黄素 COOH-HA-CUR
  19. power 见解_客户见解的两个简单来源,可改善用户体验
  20. 【MATLAB】MATLAB快速入门编程技巧

热门文章

  1. qt设置滚动区域的滚动条的样式
  2. jq之fadeOut()
  3. 手把手教你用java完成文件、图片下载
  4. 华为鸿蒙用着怎么样,首批华为鸿蒙用户体验如何?“差评”有点难听,但是很真实!...
  5. mysql为什么选innodb_为什么现在的MySQL都要使用innoDB引擎-Go语言中文社区
  6. python多进程队列中的队列_python 多进程队列数据处理详解
  7. linux 内核级资源查看,Linux资源管理
  8. java web 文件上传工具类_JavaWeb中实现文件上传的方式有哪些?
  9. php 读取 stl 文件,科学网—[转载]【源码】读取ASCII STL文件的STLReader - 刘春静的博文...
  10. linux 对象 调出r_【转】Linux - chown 中的 -R 参数