2019独角兽企业重金招聘Python工程师标准>>>

单一职责原则(Single Responsibility Principle),简称SRP。

定义:

There should never be more than one reason for a class to change.

应该有且仅有一个原因引起类的变更。

有时候,开发人员设计接口的时候会有些问题,比如用户的属性和用户的行为被放在一个接口中声明。这就造成了业务对象和业务逻辑被放在了一起,这样就造成了这个接口有两种职责,接口职责不明确,按照SRP的定义就违背了接口的单一职责原则了。

下面是个例子:

package com.loulijun.chapter1;

public interface Itutu {

//身高

void setShengao(double height);

double getShengao();

//体重

void setTizhong(double weight);

double getTizhong();

//吃饭

boolean chiFan(boolean hungry);

//上网

boolean shangWang(boolean silly);

}

  上面的例子就存在这个问题,身高、体重属于业务对象,与之相应的方法主要负责用户的属性。而吃饭、上网是相应的业务逻辑,主要负责用户的行为。但是这就会给人一种不知道这个接口到底是做什么的感觉,职责不清晰,后期维护的时候也会造成各种各样的问题。

解决办法:单一职责原则,将这个接口分解成两个职责不同的接口即可

ItutuBO.java:负责tutu(涂涂,假如是个人名)的属性

package com.loulijun.chapter1;

/**

* BO:Bussiness Object,业务对象

* 负责用户的属性

* @author Administrator

*

*/

public interface ItutuBO {

//身高

void setShengao(double height);

double getShengao();

//体重

void setTizhong(double weight);

double getTizhong();

}

ItutuBL.java:负责涂涂的行为

package com.loulijun.chapter1;

/**

* BL:Business Logic,业务逻辑

* 负责用户的行为

* @author Administrator

*

*/

public interface ItutuBL {

//吃饭

boolean chiFan(boolean hungry);

//上网

boolean shangWang(boolean silly);

}

这样就实现了接口的单一职责。那么实现接口的时候,就需要有两个不同的类

TutuBO.java

package com.loulijun.chapter1;

public class TutuBO implements ItutuBO {

private double height;

private double weight;

@Override

public double getShengao() {

return height;

}

@Override

public double getTizhong() {

return weight;

}

@Override

public void setShengao(double height) {

this.height = height;

}

@Override

public void setTizhong(double weight) {

this.weight = weight;

}

}

TutuBL.java

package com.loulijun.chapter1;

public class TutuBL implements ItutuBL {

@Override

public boolean chiFan(boolean hungry) {

if(hungry)

{

System.out.println("去吃火锅...");

return true;

}

return false;

}

@Override

public boolean shangWang(boolean silly) {

if(silly)

{

System.out.println("好无聊啊,上会网...");

return true;

}

return false;

}

}

这样就清晰了,当需要修改用户属性的时候只需要对ItutuBO这个接口来修改,只会影响到TutuBO这个类,不会影响其他类。

那么单一职责原则的意义何在呢?

1、降低类的复杂性,实现什么样的职责都有清晰的定义

2、提高可读性

3、提高可维护性

4、降低变更引起的风险,对系统扩展性和维护性很有帮助

但是、使用单一职责原则有一个问题,“职责”没有一个明确的划分标准,如果把职责划分的太细的话会导致接口和实现类的数量剧增,反而提高了复杂度,降低了代码的可维护性。所以使用这个职责的时候还要具体情况具体分析。建议就是接口一定要采用单一职责原则,实现类的设计上尽可能做到单一职责原则,最好是一个原因引起一个类的变化。

转载于:https://my.oschina.net/u/1409620/blog/293879

设计模式--6大原则--单一职责原则相关推荐

  1. Java设计模式七大原则-单一职责原则

    目录 概述:设计模式的目的 设计模式七大原则 单一职责原则 单一职责原则注意事项和细节 概述:设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等 ...

  2. 设计模式原则—单一职责原则

    设计模式概念与作用: 设计模式是一套被反复使用的.多数人知晓.经过分类编目的优秀代码设计经验的总结.特定环境下特定问题的处理方法. 1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用 2 ...

  3. 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)

    设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...

  4. 六大设计原则-单一职责原则

    1.开闭原则        2.接口隔离原则 3.依赖倒置原则 4.迪米特原则             5.里氏替换原则     6.单一职责原则 单一职责原则 针对的问题 类T负责两个不同职责:职责 ...

  5. 设计模式个人总结,单一职责原则总结

    总结经验 近期自学Unity引擎,学到了关于设计模式这一块,以前学习Java多次接触设计模式,也在应用的开发过程中频繁使用.虽然开发过程中没有特意去强调使用设计模式,但设计模式的使用总是潜移默化的,现 ...

  6. 学习设计模式 - 六大基本原则之单一职责原则

    设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...

  7. 设计模式原则--单一职责原则

    单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因 场景: 一个公司有3类员工,分别是 主管,程序员,销售 代码: using System; using System.Coll ...

  8. java设计模式之设计原则③单一职责原则

    定义: 不要存在多于一个导致类变更的原因 一个类/接口/方法只负责一项职责 优点: 降低类的复杂度,提高类的可读性,提高系统的可维护性.降低变更引起的风险 以下通过案例进行理解单一职责原则: 创建一个 ...

  9. 设计模式之禅之单一职责原则

    声明:本文为阅读秦小波所写的<设计模式之禅>所写小结,文章内容可能有部分引述此书. 单一职责原则(Single Responsibility Principle) 1.定义:    在接口 ...

最新文章

  1. Cxf + Spring3.0 入门开发WebService
  2. python培训中心-吴中区Python培训中心
  3. Caffe中的损失函数解析
  4. rabbitmq 启动异常_RabbitMQ:消息发送确认 与 消息接收确认(ACK)
  5. JDBC详解系列之流程
  6. 【解题报告】Leecode 2057. 值相等的最小索引——Leecode周赛系列
  7. PHPMailer目录和命名空间没有错,但是始终class not found,的原因和解决方法
  8. 树:二叉树的层序遍历算法(超简洁实现及详细分析)
  9. getComputedStyle与currentStyle获取样式(style/class)
  10. Oracle下载 OPatch
  11. Linux基础命令大全
  12. Origin: 软件申请+续期指引
  13. 高中计算机基础知识课件,高中信息技术基础教案
  14. 建立人脉关系以及可能认识的人推荐
  15. kdev-ruby 停止开发,原 maintainer 转用其它编辑器
  16. 《Java权威指南》_java权威指南CSS篇
  17. QT 大作业实现对图片与视频的处理
  18. 7 个支持敏捷的开源项目管理工具,更好地管理项目
  19. 视觉培训2 机器学习基础知识学习
  20. 汽车维修管理系统(RPMS)项目

热门文章

  1. 万物互联之~RPC专栏
  2. 谈大数据也谈人工智能 郭为告诉你一个不一样的神州控股
  3. 缓冲运动之框架開始一级简单框架实例
  4. AndroidService 深度分析(2)
  5. OC开发_Storyboard——MapKit
  6. 基于ip tunnel连接不同三个不同网络的×××
  7. C#编写串口通信程序(转)
  8. 领域驱动设计在马蜂窝优惠中心重构中的实践
  9. Accoridion折叠面板
  10. linux 下使用 curl post