编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 01.面向对象六大原则
  • 02.单一职责原则详解
  • 03.开闭原则详细介绍
  • 04.里式替换原则介绍
  • 05.接口隔离原则介绍
  • 06.依赖倒置原则介绍
  • 07.迪米特原则介绍
  • 08.代码保持简单原则
  • 09.DRY原则简单介绍

六大设计原则

原则描述
单一职责原则一个类只负责一个功能领域中的相应职责。
开闭原则对象应该对于扩展是开放的,对于修改是封闭的。
里氏替换原则所有引用基类的地方必须能透明地使用其子类的对象。
依赖倒置原则高层模块不依赖低层模块,两者应该依赖其对象;抽象不应该依赖细节;细节应该依赖抽象。
接口隔离原则类间的依赖关系应该建立在最小的接口上。
迪米特原则也称最少知识原则,一个对象对其他对象有最少的了解。

目录

  • 01.面向对象六大原则
  • 02.单一职责原则详解
  • 03.开闭原则详细介绍
  • 04.里式替换原则介绍
  • 05.接口隔离原则介绍
  • 06.依赖倒置原则介绍
  • 07.迪米特原则介绍
  • 08.代码保持简单原则
  • 09.DRY原则简单介绍

01.面向对象六大原则

六大原则一句话介绍

  1. 单一职责原则:指一个类的功能要单一,不能包罗万象。
  2. 开放封闭原则:指一个模块在扩展性方面应是开放的,在更改性方面应是封闭的
  3. 替换原则:子类应当可以替换父类,并出现在父类能够出现的任何位置
  4. 依赖原则:具体依赖抽象,上层依赖下层
  5. 接口分离原则:模块间要通过抽象接口隔开,而不是通过具体的类强行耦合起来。
  6. 迪米特法则:最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

02.单一职责原则详解

  1. 问题思考:单一职责如何评判?实际有哪些运用,有哪些优势?类设计成单一好在哪里,说一下你的看法?为何说单一职责界定不清晰?
  2. 单一的概念:一种理解是:把模块看作比类更加抽象的概念,类也可以看作模块。另一种理解是:把模块看作比类更加粗粒度的代码块,模块中包含多个类,多个类组成一个模块。
  3. 单一职责如何理解:这里单一是针对类,一个类只负责完成一个职责或者功能!换一个角度来说,不要设计大而全的类,一个类如果包含多个不相干的功能,就需要将它拆成功能单一粒度的类。
  4. 单一职责的背景:当一个类或模块承担过多的责任时,它会变得复杂、难以理解和难以维护。所以这个时候出现了单一职责!
  5. 为何遵守单一原则:避免类大而全降低变更风险;提高类可维护性和可读性;提高系统的可维护性。
  6. 方法层面单一职责:一个方法应该只负责完成一个明确的功能,而不是承担过多的责任。比如微信支付,支付宝支付,银行卡支付,写成三个方法比写在一个方法中好!
  7. 接口层面单一职责:将一个接口的责任限制在一个单一的功能领域上。一个接口应该只定义与特定功能相关的方法,而不是承担过多的职责。
  8. 类层面单一职责:将一个类的责任限制在一个单一的功能领域上。一个类应该只负责实现一个明确的功能,而不是承担过多的职责。
  9. 单一职责判断有时模糊:因为单一职责原则并不是一个绝对的规则,而是一个指导性原则,需要根据具体的情况和设计目标来进行判断。
  10. 单一职责判断原则总结:1.类,方法,接口功能是否明确和一致;2.是否有过多的依赖和耦合;3.是否容易理解和维护;4.是否便于拓展和重用。

03.开闭原则详细介绍

  1. 问题思考:开闭原则的主要用途是什么?如何才能做到对外拓展开放,对内修改关闭?你平常是如何理解开闭原则的,判断的标准是什么?
  2. 如何理解开闭原则:软件实体(模块、类、方法等)应该“对扩展开放、对修改关闭”。
  3. 为何开闭原则比较难学:怎样的代码改动才被定义为‘修改’?怎么才算满足或违反‘开闭原则’?如何理解大部分设计模式都是遵循开闭原则!
  4. 开笔原则的背景:软件/业务迭代升级中,面对代码变化,修改原来代码可能引入原有模块bug风险,因此尽量通过对外拓展来实现功能迭代。
  5. 实现开闭原则的方式:常用的设计技术有以下几种,1.抽象类和接口;2.策略模式;3.装饰器模式等。
  6. 开闭原则的案例教学:绘制圆形/矩形,通过if-else来执行不同case逻辑,新增一种类型则需要修改原逻辑。因此考虑通过接口+抽象类方式实现友好拓展。
  7. 开闭原则的优点:1.提高代码拓展性和可维护性;2.提高代码可测试的粒度;3.降低的代码耦合度。
  8. 开闭原则的缺点:1.对代码设计要求高;2.可能会导致代码量增大和变得复杂;3.可能会带来设计上的限制。
  9. 总结如何理解开闭原则:当需求发生变化时,我们应该通过添加新的代码来扩展功能,而不是修改已有的代码。
  10. 总结如何运用开闭原则:通过封装变化、使用抽象化、利用扩展点和遵循依赖倒置原则来实现。

04.里式替换原则介绍

  1. 里式替换问题思考:什么是里氏替换的原则?有那些场景满足里氏替换原则?它跟多态有何区别?
  2. 如何理解里式替换原则:子类可以替换父类,并且保证原有的逻辑不变以及正确性不被破坏。
  3. 列举一个里氏替换的场景:比如支付宝,微信支付。将通用支付校验逻辑放到父类中,支付子类继承父类进行支付,支付金额都符合父类的约束。
  4. 里式替换原则的背景:面向对象中继承是一种机制,子类可以继承父类属性和行为。当使用继承时,子类不会破坏父类原有程序功能,这就是里氏替换的背景。
  5. 实现里式替换原则的方式:应该确保子类在扩展父类功能时,保持父类的行为一致性。简单说就是父类抽取通用的逻辑。
  6. 里式替换原则的案例教学:通用支付类中,有对金额进行校验,微信和支付宝支付子类通过继承父类,分别拓展自己的业务逻辑,且金额校验逻辑受到父类的约束。
  7. 里式替换原则的优点:子类替代父类行为,且不需要修改原有逻辑。可以确保代码可拓展,可维护,可重用等优点。
  8. 里式替换原则的缺点:存在过度设计,需要引入额外的抽象层次可能增加代码复杂性,等等。
  9. 总结如何理解里式替换原则:1.有继承关系;2.子类遵循父类约定;3.子类拓展行为不破坏父类行为。
  10. 里式替换原则跟多态的区别:多态是面向对象特性,是一个语法,子类可以替换父类实现。里氏替换是设计原则,是指子类设计要保证替换父类时,不改变原有逻辑和正确性!

05.接口隔离原则介绍

  1. 接口隔离问题思考:什么叫作接口隔离法则,它和面向对象中的接口有何区别?
  2. 如何理解接口隔离原则:
  3. 为何接口隔离比较难学:
  4. 接口隔离原则的背景:
  5. 实现接口隔离原则的方式:
  6. 接口隔离原则的案例教学:
  7. 接口隔离原则的优点:
  8. 接口隔离原则的缺点:
  9. 总结如何理解接口隔离原则:
  10. 总结如何运用接口隔离原则:

06.依赖倒置原则介绍

依赖倒置原则的概念和理解

  1. 依赖倒置问题思考:
  2. 如何理解依赖倒置原则:
  3. 为何依赖倒置比较难学:
  4. 依赖倒置原则的背景:
  5. 实现依赖倒置原则的方式:
  6. 依赖倒置原则的案例教学:
  7. 依赖倒置原则的优点:
  8. 依赖倒置原则的缺点:
  9. 总结如何理解依赖倒置原则:
  10. 总结如何运用依赖倒置原则:

07.迪米特原则介绍

迪米特原则的概念和理解

  1. 迪米特问题思考:
  2. 如何理解迪米特原则:
  3. 为何迪米特比较难学:
  4. 迪米特原则的背景:
  5. 实现迪米特原则的方式:
  6. 迪米特原则的案例教学:
  7. 迪米特原则的优点:
  8. 迪米特原则的缺点:
  9. 总结如何理解迪米特原则:
  10. 总结如何运用迪米特原则:

08.代码保持简单原则

代码保持简单原则的概念和理解

  1. 代码保持简单问题思考:
  2. 如何理解代码保持简单原则:
  3. 为何代码保持简单比较难学:
  4. 代码保持简单原则的背景:
  5. 实现代码保持简单原则的方式:
  6. 代码保持简单原则的案例教学:
  7. 代码保持简单原则的优点:
  8. 代码保持简单原则的缺点:
  9. 总结如何理解代码保持简单原则:
  10. 总结如何运用代码保持简单原则:

09.DRY原则简单介绍

DRY原则的概念和理解

  1. DRY问题思考:
  2. 如何理解DRY原则:
  3. 为何DRY比较难学:
  4. DRY原则的背景:
  5. 实现DRY原则的方式:
  6. DRY原则的案例教学:
  7. DRY原则的优点:
  8. DRY原则的缺点:
  9. 总结如何理解DRY原则:
  10. 总结如何运用DRY原则:
贡献者: yangchong211