概念:

就一个类而言应该只有一个因其他变化的原因。

流程:

问题由来:设类或接口类C负责两个不同不同的职责:职责T1,职责T2。当由于职责T1需求改变进而需要修改类C时,可能导致职责T2收到不可预知的影响。

解决方案:分别建立两个类C1、C2,分管职责T1,T2。

优缺点:

1.优点: (1)、降低类的复杂度; (2)、 易维护、易扩展、可读性强 2.缺点: 使类或接口的数目增加, 难以控制。 示例代码 下面代码就没有遵循单一职责模式,如Operation即完成了+又完成了-。

package Pattern;

import java.util.Scanner;

class Operation {
String operationName; public Operation(String tempOperationName) {
operationName = tempOperationName;
} public int GetResult(int opA, int opB) { if (operationName.equals("+"))
return opA + opB;
else
return opA - opB;
}
} public class Pattern {
public static void main(String[] args) {
try { Scanner input = new Scanner(System.in);
int opA, opB, result;
opA = input.nextInt();
opB = input.nextInt(); Operation myOperation = new Operation("+");
result = myOperation.GetResult(opA, opB);
System.out.println(result); } catch (Exception e) {
e.printStackTrace();
}
}
}

尝试单一职责模式可以拆开

package Pattern;

import java.util.Scanner;

class AddOperation {
public int GetResult(int opA, int opB) {
return opA + opB;
}
} class SubOperation {
public int GetResult(int opA, int opB) {
return opA - opB;
}
} public class Pattern {
public static void main(String[] args) {
try { Scanner input = new Scanner(System.in);
int opA, opB, result; opA = input.nextInt();
opB = input.nextInt();
AddOperation myAddOperation = new AddOperation();
result = myAddOperation.GetResult(opA, opB);
System.out.println(result); opA = input.nextInt();
opB = input.nextInt();
SubOperation mySubOperation = new SubOperation();
result = mySubOperation.GetResult(opA, opB);
System.out.println(result); } catch (Exception e) {
e.printStackTrace();
}
}
}

JAVA设计模式之单一职责原则的更多相关文章

  1. 北风设计模式课程---单一职责原则(Single Responsibility Principle)

    北风设计模式课程---单一职责原则(Single Responsibility Principle) 一.总结 一句话总结: 一个类应该有且只有一个变化的原因:单一职责原则(SRP:Single Re ...

  2. 深入浅出系列第一篇(设计模式之单一职责原则)——从纯小白到Java开发的坎坷经历

    各位看官大大们,晚上好.好久不见,我想死你们了... 先说说写这个系列文章的背景: 工作了这么久了,每天都忙着写业务,好久没有好好静下心来好好总结总结了.正好这段时间公司组织设计模式的分享分,所以我才 ...

  3. 设计模式之单一职责原则(SRP)

    自己之前写过一些关于设计模式的博客,但是大部分都写得比较匆忙.现在正好趁年前有时间,笔者打算好好地整理一下自己这块知识结构.开篇的第一个原则就是设计原则里面最简单的一个原则--单一职责原则. 想必大家 ...

  4. 【设计模式】单一职责原则(SRP)

    单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...

  5. 设计模式之单一职责原则(iOS开发,代码用Objective-C展示)

    单一职责原则:就一个类而言,应该只有一个引起它变化的原因. 在iOS开发中,我们会很自然的给一个类添加各种各样的功能,比如随便写一个简单的应用程序,一般都会生成一个viewController类,于是 ...

  6. java设计模式学习笔记--单一职责原则

    单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...

  7. Java设计模式(2:单一职责原则和依赖倒置原则详解)

    一.单一职责原则 不要存在多于一个导致类变更的原因.简单来说,就是一个Class/Interface/Method只负责一项职责. 这句话最为重要的就是这一段:一个Class/Interface/Me ...

  8. 【设计模式六大原则1】单一职责原则(Single Responsibility Principle)

        http://blog.csdn.net/zhengzhb/article/category/926691/1 图片素材来源,java学习手册 ps.内容为自己整理   定义:不要存在多于一个 ...

  9. C#软件设计——小话设计模式原则之:单一职责原则SRP

    前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...

随机推荐

  1. phpcms日期时间

    PHPCMS V9调用时间标签 |日期时间格式化 转载 2016-06-17 14:58:54 标签:php PHPCMS V9 如何调用时间标签,下面分享常见的调用时间标签 |日期时间格式化 1.日 ...

  2. C++资料大全

    本文内容源自GitHub<Awesome C/C++>. 关于 C++ 框架.库和资源的一些汇总列表,由 fffaraz 发起和维护. 内容包括:标准库.Web应用框架.人工智能.数据库. ...

  3. OC—设计模式-通知的使用

    通知 通知(广播) 可以一对多的发送通知(一个发送者 多个观察者) 特别注意:在发送者 发送通知的时候,必须有观察者 发送者,就是注册一个通知中心,以他为中心,发送消息 通过通知的名字,来判断是哪个通 ...

  4. 【linux】man和--help

    man和--help都是获取命令帮助的指令. man 格式: man [命令] [root@andon tmp]# man pwd --help 命令 --help [root@andon tmp]# ...

  5. sql 操作,

    SELECT * FROM dbo.tbl_Web_Photos AS pt LEFT JOIN dbo.tbl_Web_Friends AS fd ON pt.user_email=fd.AddEm ...

  6. Python 上传和更新函数模块到PyPI

    1. update setup.py from distutils.core import setup setup( name = 'iamericnester', version = '1.4.0' ...

  7. ios的runtime为什么可以动态添加方法

    一句话概括 每个instance都有一个isa,这个isa,里面含有所有的方法列表,ios提供库函数增加,修改,即实现了动态添加方法

  8. C语言每日一题之No.9

    再做决定之前,我还是做好自己该做的.我不希望几年后会悔恨自己为什么在最该努力的时候不愿意吃苦.尊敬的女王陛下,请接题: 一.题目:有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规 ...

  9. (VS) TFS lost mapping suddenly.

    家里的网络不是很稳定.今天突然发现 TFS 上所有的 mapping都突然没有了. 尝试去remapping,在Source Control Explorer 中右击源文件,然后选择 Advanced ...

  10. IGS_学习笔记09_IREP生成服务后台工具Soagenerate.sh

    2015-01-06 Created By BaoXinjian 参考:张礼军 - http://oracleseeker.com/2009/10/23/irep_service_generation ...