面向对象设计中常见的设计原则

开闭原则
单一职责原则
里氏替换原则
依赖倒置原则
接口隔离原则
最少知识原则(迪米特法则)
少用继承多用组合(合成复用原则)

一.开闭原则

定义:一个软件实体应当对外扩展开放,对内关闭修改,即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下可扩展。
作用:(1)只对扩展代码进行测试,源代码依然可以运行。
(2)使代码具有优质的可扩展性和维护性。
实现方法:可以通过**“抽象约束、封装变化”**来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。

举例

客户需要一个减法软件:客户——>减法。
然后客户现在需要加法软件——>加法(在减法的基础上将改为加法)。
上述这种做法是错误的,违背了开闭原则,对源代码进行了修改!我们应该抽象出一个运算类或者声明一个运算法则,里面包括加法或者减法,当然也可以包括其它的!
这样我们就不必须更改源码,只要实现类或者接口就可以了。这样我们没有改变我们的抽象层(约束封装),同时通过不同子类的继承或者实现接口来更改需求(封装变化)!

二.单一职责原则

**定义:**单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分成两个类或者多个类
**优点:**降低了类的复杂度,提高了可读性和可维护性。
举例:
现有工作类:包含清理工作和文字工作
根据单子职责原则,我们需要将他们分为:清理类和文字工作类。

三.里氏替换原则

定义:

七大面向对象设计原则及其举例相关推荐

  1. 程序员必备的七大面向对象设计原则(三)

    五.接口隔离原则 1. 定义 i.  客户端不应该依赖那些它不需要的接口. ii.  一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可. 2.分析 i. ...

  2. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...

  3. 技术图文:01 面向对象设计原则

    01 面向对象设计原则 知识结构: 一碟开胃的小菜 小菜今年计算机专业大四了,学了不少软件开发方面的东西,也学着编了些小程序,踌躇满志,一心要找一个好单位.当投递了无数简历后,终于收到了一个单位的面试 ...

  4. 设计模式之面向对象设计原则

    单一职责模式 一个对象应该包含单一的职责,并且该职责被完整地封装在一个类中: 最简单的面向对象设计原则,它用于控制类的粒度大小: 单一职责原则是实现高内聚,低耦合的指导方针.它是最简单但又最难运用的原 ...

  5. 面向对象设计原则与23种设计模式

    面向对象概述 1.万物皆对象(Java反射原理-都是借助java.lang.class这个对象的属性.定义等实现) 2.面向对象的特征:封装(对象之间的隔离性.对象内部的属性封装).继承(类的重用,耦 ...

  6. uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则

    1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...

  7. 02面向对象设计原则

    技术交流QQ群:1027579432,欢迎你的加入! 1.为什么需要面向对象设计 变化是复用的天敌!面向对象设计最大的优势在于抵御变化! 2.重新认识面向对象 理解隔离变化 从宏观层面上来看,面向对象 ...

  8. C++面向对象设计原则详解

    概述 C++面向对象设计原则主要包括以下几点: 依赖倒置原则 开放封闭原则 单一职责原则 里氏替换原则 接口隔离原则 封装变化点原则 面向接口编程原则 优先使用对象组合,而不是类继承 接下来详细的分析 ...

  9. 代码质量评判标准、设计模式、面向对象设计原则速查表

    文章目录 代码质量评判标准 软件腐化的原因 提高系统可复用性的几点原则 可维护性与可复用性并不完全一致 面向对象设计原则 1. 面向对象设计的六大设计原则表 2. 图解面向对象涉及的六大原则 1. 开 ...

最新文章

  1. 对比 MySQL 的 Binlog 日志处理工具
  2. 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战
  3. redis插件连接集群 shiro_Shiro经过Redis管理会话实现集群(转载)
  4. python环境变量的配置 alias_vim-python环境配置
  5. 微信跳一跳高分系列一:解读 adb 工具
  6. axios请求拦截器错误_Axios使用拦截器全局处理请求重试
  7. 作者:郭绍光(1985-),男,中国科学院上海天文台工程师
  8. 《JSON笔记之二》----封装JSONUtil
  9. python 秒数转化为时分秒
  10. Android 秒级编译 Freeline
  11. 广东技能大赛软件测试项目,我校喜获2019年全国职业院校技能大赛软件测试赛项二等奖...
  12. Java快逸报表展现demo,快逸报表展示图片—来自数据库中的图片
  13. 多彩M618XSD垂直立式人体工学鼠标拆解
  14. 图论问题建模讨论汇总
  15. java非主流火星文输入法_我爱火星文_火星文输入法
  16. 偷看了女友的日记,我泪流满面【转载】
  17. ubuntu16.04搭建cptn+crnn
  18. 我的校招——南京烽火笔试+格力初面
  19. 使用MBROSTool 工具制作U盘多启动盘的方法总结
  20. 数据结构与算法(程序员常用十种算法下:5~10)

热门文章

  1. mysql如何存储字符上下标_SQL Server如何存储特殊字符、上标、下标
  2. linux快捷键命令收集
  3. window cmd bat批处理杀端口对应的进程
  4. 基于Python编程语言实现应用程序定时任务
  5. win10正版系统镜像
  6. Socket封包、拆包、粘包
  7. for in和Object.keys和for-of
  8. Xcode 注释快捷键
  9. (打通台式机与笔记本的连接通道)设置一个共享盘
  10. iOS摸鱼周报 第四十四期