七大面向对象设计原则及其举例
面向对象设计中常见的设计原则
开闭原则
单一职责原则
里氏替换原则
依赖倒置原则
接口隔离原则
最少知识原则(迪米特法则)
少用继承多用组合(合成复用原则)
一.开闭原则
定义:一个软件实体应当对外扩展开放,对内关闭修改,即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下可扩展。
作用:(1)只对扩展代码进行测试,源代码依然可以运行。
(2)使代码具有优质的可扩展性和维护性。
实现方法:可以通过**“抽象约束、封装变化”**来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。
举例:
客户需要一个减法软件:客户——>减法。
然后客户现在需要加法软件——>加法(在减法的基础上将改为加法)。
上述这种做法是错误的,违背了开闭原则,对源代码进行了修改!我们应该抽象出一个运算类或者声明一个运算法则,里面包括加法或者减法,当然也可以包括其它的!
这样我们就不必须更改源码,只要实现类或者接口就可以了。这样我们没有改变我们的抽象层(约束封装),同时通过不同子类的继承或者实现接口来更改需求(封装变化)!
二.单一职责原则
**定义:**单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分成两个类或者多个类
**优点:**降低了类的复杂度,提高了可读性和可维护性。
举例:
现有工作类:包含清理工作和文字工作
根据单子职责原则,我们需要将他们分为:清理类和文字工作类。
三.里氏替换原则
定义:
七大面向对象设计原则及其举例相关推荐
- 程序员必备的七大面向对象设计原则(三)
五.接口隔离原则 1. 定义 i. 客户端不应该依赖那些它不需要的接口. ii. 一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可. 2.分析 i. ...
- 7.12 其他面向对象设计原则3: 依赖倒置原则DIP
其他面向对象设计原则3: 依赖倒置原则DIP The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...
- 技术图文:01 面向对象设计原则
01 面向对象设计原则 知识结构: 一碟开胃的小菜 小菜今年计算机专业大四了,学了不少软件开发方面的东西,也学着编了些小程序,踌躇满志,一心要找一个好单位.当投递了无数简历后,终于收到了一个单位的面试 ...
- 设计模式之面向对象设计原则
单一职责模式 一个对象应该包含单一的职责,并且该职责被完整地封装在一个类中: 最简单的面向对象设计原则,它用于控制类的粒度大小: 单一职责原则是实现高内聚,低耦合的指导方针.它是最简单但又最难运用的原 ...
- 面向对象设计原则与23种设计模式
面向对象概述 1.万物皆对象(Java反射原理-都是借助java.lang.class这个对象的属性.定义等实现) 2.面向对象的特征:封装(对象之间的隔离性.对象内部的属性封装).继承(类的重用,耦 ...
- uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则
1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...
- 02面向对象设计原则
技术交流QQ群:1027579432,欢迎你的加入! 1.为什么需要面向对象设计 变化是复用的天敌!面向对象设计最大的优势在于抵御变化! 2.重新认识面向对象 理解隔离变化 从宏观层面上来看,面向对象 ...
- C++面向对象设计原则详解
概述 C++面向对象设计原则主要包括以下几点: 依赖倒置原则 开放封闭原则 单一职责原则 里氏替换原则 接口隔离原则 封装变化点原则 面向接口编程原则 优先使用对象组合,而不是类继承 接下来详细的分析 ...
- 代码质量评判标准、设计模式、面向对象设计原则速查表
文章目录 代码质量评判标准 软件腐化的原因 提高系统可复用性的几点原则 可维护性与可复用性并不完全一致 面向对象设计原则 1. 面向对象设计的六大设计原则表 2. 图解面向对象涉及的六大原则 1. 开 ...
最新文章
- 对比 MySQL 的 Binlog 日志处理工具
- 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战
- redis插件连接集群 shiro_Shiro经过Redis管理会话实现集群(转载)
- python环境变量的配置 alias_vim-python环境配置
- 微信跳一跳高分系列一:解读 adb 工具
- axios请求拦截器错误_Axios使用拦截器全局处理请求重试
- 作者:郭绍光(1985-),男,中国科学院上海天文台工程师
- 《JSON笔记之二》----封装JSONUtil
- python 秒数转化为时分秒
- Android 秒级编译 Freeline
- 广东技能大赛软件测试项目,我校喜获2019年全国职业院校技能大赛软件测试赛项二等奖...
- Java快逸报表展现demo,快逸报表展示图片—来自数据库中的图片
- 多彩M618XSD垂直立式人体工学鼠标拆解
- 图论问题建模讨论汇总
- java非主流火星文输入法_我爱火星文_火星文输入法
- 偷看了女友的日记,我泪流满面【转载】
- ubuntu16.04搭建cptn+crnn
- 我的校招——南京烽火笔试+格力初面
- 使用MBROSTool 工具制作U盘多启动盘的方法总结
- 数据结构与算法(程序员常用十种算法下:5~10)