一个优良的系统设计,强调模块间保持低耦合、高内聚的关系,在面向对象设计中这条规则同样适用,所以面向对象的第一个设计原则就是:单一职责原则(SRP,Single Responsibility Principle)。

单一职责,强调的是职责的分离,在某种程度上对职责的理解,构成了不同类之间耦合关系的设计关键,因此单一职责原则或多或少成为设计过程中一个必须考虑的基础性原则。

关于单一职责原则,其核心的思想是:一个类,最好只做一件事,只有一个引起它变化的原因。

单一职责原则可以看作是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而极大的损伤其内聚性和耦合度。单一职责,通常意味着单一的功能,因此不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因。

看下面例子:

package com.google.design;

public interface Program {

//绘制图形

void draw();

//计算面积

void area();

}

package com.google.design;

public class DrawGraph implements Program{

@Override

public void draw() {

System.out.println("绘制图形");

}

@Override

public void area() {

// TODO Auto-generated method stub

}

}

package com.google.design;

public class AreaCount implements Program{

@Override

public void draw() {

// TODO Auto-generated method stub

}

@Override

public void area() {

System.out.println("计算面积");

}

}

以上 图形计算程序只使用了正方形的Area()方法,永远不会使用Draw()方法,而它却跟Draw方法关联了起来。这违反了单一原则,如果未来因为图形绘制程序导致Draw()方法产生了变化,那么就会影响到本来毫不关系的图形计算程序。

应该把接口改成2个,将不同的职责分配给不同的类,使单个类的职责尽量单一,就隔离了变化,这样他们也不会互相影响了。

package com.google.design;

public interface Draw {

//绘制图形

void draw();

}

package com.google.design;

public interface Area {

//计算面积

void area();

}

然后分别实现接口,如下:

http://www.dengb.com/Javabc/527346.htmlwww.dengb.comtruehttp://www.dengb.com/Javabc/527346.htmlTechArticle一个优良的系统设计,强调模块间保持低耦合、高内聚的关系,在面向对象设计中这条规则同样适用,所以面向对象的第一个设计原则就是...

java 职责单一原则,设计模式原则之一:单一职责原则相关推荐

  1. 设计模式—— 四:接口隔离原则

    什么是接口隔离原则? 接口隔离原则有两种定义: Clients should not be forced to depend upon interfaces that they don't use.( ...

  2. 设计模式—— 五:迪米特原则

    文章目录 什么是迪米特原则? 迪米特法则的含义 1. 只和朋友交流 不遵循迪米特法则的定义 遵循迪米特法则的定义 2. 朋友间也是有距离的 不遵循迪米特原则的设计 遵循迪米特原则的设计 3. 是自己的 ...

  3. 大话设计模式三之单一职责原则、开放-封闭原则、依赖倒置原则、里氏代换原则

    单一职责原则 单一职责原则(SRP),意思就是说,功能要单一.准确解释是,就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或 ...

  4. 【设计模式】软件设计七大原则 ( 单一职责原则 | 代码示例 )

    文章目录 一.单一职责原则简介 二.单一职责原则代码示例 ( 反面示例 ) 1.不遵循单一职责原则的类 2.测试类 三.单一职责原则代码示例 ( 正面示例 | 类的单一职责 ) 1.用翅膀飞的鸟 2. ...

  5. php 单一职责,读懂 SOLID 的「单一职责」原则

    这是理解SOLID原则中,关于单一职责原则如何帮助我们编写低耦合和高内聚的第二篇文章. 单一职责原则是什么 之前的第一篇文章阐述了依赖倒置原则(DIP)能够使我们编写的代码变得低耦合,同时具有很好的可 ...

  6. 七种设计原则(二)单一职责原则

    2019独角兽企业重金招聘Python工程师标准>>> 1.定义 单一职责原则概念::规定一个类应该只有一个发生变化的原因. There should never be more t ...

  7. 里氏替换原则_代码需要有单一职责,还要开闭,里氏替换又是什么鬼?

    目录 单一职责原则: 开闭原则: 里氏替换原则: 单一职责原则: 每一个系统中的功能都表示一个职责,这些职责可以映射到模块(类)中, 且尽可能的保证这些类中没有功能上的重复,设计中每次应只关注一个职责 ...

  8. 面向对象思想 常说的OOP五大原则就是指1、单一职责原则; 2、开放闭合原则; 3、里氏替换原则; 4、依赖倒置原则; 5、接口隔离原则。...

    常说的OO五大原则就是指其中的 : 1.单一职责原则: 2.开放闭合原则: 3.里氏替换原则: 4.依赖倒置原则: 5.接口隔离原则. https://blog.csdn.net/Anders_Zhu ...

  9. Java 设计模式总结及六大设计原则

    设计模式总结 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式. ...

  10. java设计模式总结之六大设计原则(有图有例子)

    转载:https://www.cnblogs.com/jpfss/p/9765239.html 下面来总结下自己所学习的设计模式,首先我们看下各个模式之间的关系图,下面这张图是网上比较典型的一个类图关 ...

最新文章

  1. 一文看懂BCH减半时间计算及减半影响
  2. Android - toolbar navigation 样式
  3. Android编译系统分析四:实战-新增一个产品
  4. 非标自动化企业前十名_非标设备的现状
  5. 洛谷 - P4016 负载平衡问题(最小费用最大流)
  6. 【阿里妈妈数据科学系列】第一篇:认识在线实验
  7. python终端会话_如何为Python终端提供持久性历史记录
  8. ShadeGraph教程之节点详解1:Artistic Nodes
  9. 直播围观!百度大脑智能监控如何为安全生产保驾护航?
  10. ffmpeg常用数据结构4
  11. 帆软获取单元格值与赋值
  12. (字符串)ZigZag Conversion
  13. 创投观察 | 市场白热化前,RPA公司要怎么构建核心壁垒?
  14. EQMX+Nginx集群搭建
  15. 一阶锁相环的FPGA实现(基于quartus+matlab)
  16. Python语言程序设计基础_实验1 Python程序设计基础_答案_通识教育必修课程_上海师范大学
  17. H5 App实现热更新,不需要重新安装app
  18. qq邮件如何设置html阅读,使用qq邮箱发送html格式的邮件
  19. java 面试知识点笔记(七)多线程与并发 上篇
  20. [并发并行]_[线程池]_[Programming With POSIX Threads的线程池实现分析1]

热门文章

  1. INSERT INTO SELECT FROM 的用法
  2. 2019年全国大学生电子竞赛 | 电磁炮制作教程
  3. 视频剪辑入门技能快速分享
  4. 南京大学计算机实验教程,南京大学 计算机系统基础 课程实验 2018(PA2)
  5. 南京大学计算机 国家重点实验室,南京大学
  6. 中国四大名著的文化价值
  7. wh计算公式_锂电池计算公式wh 锂电池的mah和wh如何换算?
  8. html常见基础标签大汇总
  9. ddr4 dqs 频率_一张图看懂如何选择DDR4内存频率和容量
  10. 无穷小、梯度向量和泰勒展开