设计模式六大原则——单一职责原则(SRP)
定义
就一个类而言,应该仅有一个引起它变化的原因。通俗的说,一个类只负责一项职责。
问题的由来
手机的功能多,但是每一项的功能都不强:
拍摄功能——>专业的摄像机和照相机
手机游戏——>PSP
网络摄像头——>专业摄像头
GPS功能——>专业GPS导航系统
每一个职责都是一个变化的轴线,当需求变化时会反映为类的职责的变化,如果一个类的承担的职责多于一个,那么引起她变化的原因就有多个,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,从而导致脆弱的设计。
解决方案
遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。
示例
public interface Program{void draw(); //绘制图形void area(); //计算面积}public class DrawGraph implements Program{public void draw(){System .Out.PrintIn("绘制图形");}public void area(){}}public class AreaCount implements Program{public void draw(){}public void area(){System .out.printIn("计算面积");}}}
以上 图形计算程序只使用了正方形的Area()方法,永远不会使用Draw()方法,而它却跟Draw方法关联了起来。这违反了单一原则,如果未来因为图形绘制程序导致Draw()方法产生了变化,那么就会影响到本来毫不关系的图形计算程序。
应该把接口改成2个,将不同的职责分配给不同的类,使单个类的职责尽量单一,就隔离了变化,这样他们也不会互相影响了。
public interface Draw{void draw(); //绘制图形}public interface Area{void area(); //计算面积}
然后分别实现接口,如下:
设计模式六大原则——单一职责原则(SRP)相关推荐
- 大话设计模式三之单一职责原则、开放-封闭原则、依赖倒置原则、里氏代换原则
单一职责原则 单一职责原则(SRP),意思就是说,功能要单一.准确解释是,就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或 ...
- 设计模式原则—单一职责原则
设计模式概念与作用: 设计模式是一套被反复使用的.多数人知晓.经过分类编目的优秀代码设计经验的总结.特定环境下特定问题的处理方法. 1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用 2 ...
- android activity解耦,Android与设计模式:用单一职责原则为Activity解耦
一.什么是单一职责原则单一职责原则(SRP:Single responsibility principle)又称单一功能原则,其定义为:一个类,应该只有一个可以导致变化的原因.光看概念 一.什么是单一 ...
- Java设计模式七大原则-单一职责原则
目录 概述:设计模式的目的 设计模式七大原则 单一职责原则 单一职责原则注意事项和细节 概述:设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等 ...
- 六大设计原则-单一职责原则
1.开闭原则 2.接口隔离原则 3.依赖倒置原则 4.迪米特原则 5.里氏替换原则 6.单一职责原则 单一职责原则 针对的问题 类T负责两个不同职责:职责 ...
- 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...
- [置顶] 设计模式之六大原则——单一职责原则(SRP)
定义: 应该有且仅有一个原因引起类的变更. There should never be more than one reason for a class to change. 优点: 1.类的复杂性降 ...
- 六大设计模式原则-单一职责原则
一.单一职责原则定义 单一职责原则是面向对象五个基本原则(SOLID)之一,也是最简单的面向对象设计原则,用于控制类的颗粒大小.单一职责定义如下: 单一职责原则(SRP:Single responsi ...
- 设计模式原则--单一职责原则
单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因 场景: 一个公司有3类员工,分别是 主管,程序员,销售 代码: using System; using System.Coll ...
最新文章
- android viewpager嵌套侧滑删除listview冲突问题
- 高通平台点亮LCD个人总结
- win7+ubuntu 13.04双系统安装方法
- 【Android游戏开发十四】深入Animation,在SurfaceView中照样使用Android—Tween Animation!...
- mysql 5.6 安装_MySQL的安装,步骤详细
- 解决win10cpu使用率100_如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了...
- Java 堆内存模型
- 事件EVENT,WaitForSingleObject(),WaitForMultipleObjecct()和SignalObjectAndWait() 的使用(下)
- CentOS查看分区的方式
- java学生考勤代码免费,基于jsp的学生考勤管理-JavaEE实现学生考勤管理 - java项目源码...
- 【七】zuul路由网关
- 教你用手机制作二寸证件照,操作简单,一学就会!
- micropython支持stm32型号_单片机仿真软件Proteus,可支持程序联调
- Helm-chart学习-简单介绍与使用
- PHP前一页 后一页 切换
- 如何根据函数,绘制出函数的图像
- ABB机器人基本知识。
- 【计算机毕业设计】家政服务中介网
- 一周Hard (2021.11.29-2021.12.05)
- 用华秋DFM作为PCB Viewer
热门文章
- android studio 模拟器内存不足,Android Studio模拟器的问题及解决办法
- 史上最简单的spark教程第二章-快速开发部署你的第一个Java+spark程序
- php guzzle批量请求
- 清华大学公开课线性代数2——第12讲:复数与复矩阵
- Encryption raised an exception
- 对抖音App评论进行抓取
- jpress转换html5,JPress技术精讲:JPress如何做到安装后重新加载的?
- pyenv、ipython、jupyter的安装使用
- 人工智能ai的有关专业术语_您需要知道的11个人工智能术语
- 【Java】JavaMail发送QQ邮件邮件