设计模式六大原则-java复读记录

  • 内容总览
  • 单一职责原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则
  • 迪米特法则
  • 开闭原则
  • 设计模式
  • 参考文献

内容总览

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

单一职责原则

单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式与实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。 [1]
所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。
文本来源:单一职责原则
在我们常见的互联网设计中,单一原则使用就是DDD领域驱动设计模式,但是这个也有优缺点:
优点

  • 类职责明确,复杂度降低
  • 可读性提高,可维护性提高
  • 功能单一性,耦合度低,变更复杂度降低

缺点

  • 由于单一职责原则,单一性的抽象面临着难点,实现单一职责考虑的方面就很多,考虑不周到会给系统带来严重后果,过细划分原则或者过粗划分原则都给系统带来复杂度。这就会有DDD领域驱动原则,原子原则再一层扩展业务原则,动态组装原则,但是一处牵动全局,维护的单一职责的业务时,可能要过多考虑原则职称关联性,所以这里的DDD也会面临拆分的颗粒度问题。

实例样板

@Mapper
public interface UserMapper {// 添加用户信息int insertUser(User user);// 通过用户id删除用户int deleteUserById(int uId);// 通过用户id查询用户idUser selectUserById(int uId);
}

上面mybatis操作数据库,也就是类中,每个方法都有独立的功能,独立的职责,当然,可以抽象出一个类就一个功能,也就是把上面的三个功能点抽象出三个接口。

里氏替换原则

在面向对象的程序设计中,里氏替换原则(Liskov Substitution principle)是对子类型的特别定义。它由芭芭拉·利斯科夫(Barbara Liskov)在1987年在一次会议上名为“数据的抽象与层次”的演说中首先提出。
文章来源:里氏替换原则
其实说白了就是子类和父类的关系,子类继承基类,但是不能修改父类原有功能。java继承变成语言时,我们尽量不要修改父类属性和关系,除非特殊情况,虽然多态有时违背了此原则,但是尽量少违背。
java中涉及里氏替换原则的有

  • 类与类之间的修饰符,子类修饰符必须大于等于父类
  • 策略模式
  • 代理模式
  • 合成模板模式

依赖倒置原则

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
文本来源:依赖倒置原则
java中涉及依赖倒置原则是:

  • 实现类以来接口和抽象,接口和抽象不依赖于实现类,降低耦合,提高稳定
  • 在spring的IOC使用此原则

接口隔离原则

java里面就是面向接口编程

迪米特法则

迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowledge Principle),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。英文简写为: LOD。
文本来源:迪米特法则

  • 最小执行权,在安全权限设计方面,就设计这个法则。
  • 还有我们在设计层面,明确入参和出参数,其他一概不想知道内部情况,也就是我们接口设计原则

开闭原则

在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。
文本来源:开闭原则

其目的是实现高内聚,低耦合,可扩展,这个原则需要前面原则一些基础作为铺垫。

使用实际场景

  • java使用修饰符,严格修改访问范围,进行强制约束,操作扩展边界
  • 抽象层或者接口层,确定范围,一旦确定就不可修改,只能扩展。

设计模式

这里提及一下常见的设计模式

  • 单例模式
  • 工厂模式
  • 观察者模式
  • 代理模式
  • 策略模式
  • 适配器模式
  • 模板方法模式
    适配器和策略区别:一个是适配执行代码(if,target-adapter-adaptee),一个是选择一个策略(key-value,返回策略实现类,Strategy->StrategyFactory->execute())。

参考文献

【1】百度百科
【2】JAVA重要知识点梳理

设计模式六大原则-java复读记录相关推荐

  1. Java 设计模式六大原则

    Java 设计模式六大原则 单一职责原则 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而 ...

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

    面对项目中如此众多的设计模式,我们有时候无法 下手.在强大的设计框架也终脱离不了23种设计模式,6大原则.我们只要把内功修炼好,掌握其精髓也离我们不远了... 目录: 设计模式六大原则(1):单一职责 ...

  3. Java设计模式(二)简单工厂模式—设计模式六大原则

    文章目录 设计模式六大原则 1. 开闭原则 2. 里氏代换原则 3. 依赖倒转原则 4. 接口隔离原则 5. 迪米特法则(最少知道原则) 6. 合成复用原则 工厂设计模式 什么是工厂模式 工厂模式的好 ...

  4. 设计模式六大原则之--开闭原则(OCP)

    设计模式六大原则之--开闭原则(OCP) 前言 1 描述 2 理解: 3 问题由来: 4 使用LoD的好处: 5 难点: 6 最佳实践: 7 范例: 前言 The Open - Closed Prin ...

  5. PHP 设计模式六大原则

    http://www.cnblogs.com/yujon/p/5536118.html 设计模式六大原则(1):单一职责原则 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责 设计模 ...

  6. 子慕谈设计模式系列(二)——设计模式六大原则

    六大原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 前言 设计模式不容易用文字描述清楚,而过多的代码,看起来也让人摸不到头脑,加上词语或者文字描述的抽象感,很容易让 ...

  7. 设计模式六大原则之里氏替换原则、依赖倒置原则详解

    设计模式六大原则--里氏替换原则.依赖倒置原则详解 1.里氏代换原则(Liskov Substitution Principle) 概念 顾名思义,该原则用于经常发生替换的地方,在Java中指的是实现 ...

  8. 设计模式六大原则及常用模式详解

    设计模式六大原则 1.单一职责原则(Single Responsibility Principle) 定义 : 应该有且只有一个原因引起类的变化 注意 : 这里的类不光指类,也适用于方法和接口,比如我 ...

  9. 设计模式六大原则(SOLID)

    设计模式六大原则(SOLID) Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitutio ...

最新文章

  1. 使用Qt编写模块化插件式应用程序
  2. Oracle12c多租户如何启动关闭CDB或PDB (PDB自动启动)
  3. mustache模板技术
  4. linux日志系统分析:rsyslog、syslog、klog
  5. Linux内核探讨-- 第二章
  6. 1.简单认识PHP和环境搭建
  7. LeetCode 1049. 最后一块石头的重量 II
  8. nginx虚拟目录实现两个后台使用
  9. Intellij IDEA导入JAVA项目并启动(哈哈哈,天天都有人问)
  10. IDEA2018部署jeesite3完美运行教程
  11. VS 的编译选项 build下的 platform target -- Any CPU和x86有什么影响?
  12. 国赛助力:第三类边界条件热传导方程及基于三对角矩阵的数值计算MATLAB实现(2020A)
  13. 设置全局键盘钩子和消息钩子
  14. 1040. 【GDOI2007】夏娜的菠萝包【推荐】
  15. scannable dest type struct with >1 columns (3) in result
  16. 转本计算机知识普及软件,江苏专转本新政策的解读
  17. STM32和51最小系统原理图以及PCB板图以及元件库
  18. 【机器学习】Python 3.0 简单实现K-邻近法
  19. 某bobo在线视频APP下载暴力流逆向
  20. 原来卡布奇诺信息安全协会是干这个的呀,一起来看看吧。

热门文章

  1. 小米门卡协议加载失败_小米手机门禁卡空白卡开通步骤及写入激活方法
  2. untrusted Developer You can allow using these apps in settings you can allow using these apps i
  3. 联想小新一键恢复小孔_联想小新笔记本如何一键恢复出厂设置_联想小新air恢复出厂设置教程...
  4. 通俗易懂happens-before理解
  5. 微型计算机赛睿寒冰5评测,为什么说寒冰5才是赛睿性价比最高的游戏耳机?
  6. Android 双usb 摄像头支持
  7. android手机号码恢复,安卓手机通讯录没有了怎么办?如何恢复手机通讯录
  8. 2020华为软件精英挑战赛历程总结——决赛篇
  9. 智力题库软件测试,最新软件测试笔试题网友回忆版
  10. 东京电力公司TEPCO投资区块链初创企业,目标系统去中心化