JAVA设计模式之单一职责原则
概念:
就一个类而言应该只有一个因其他变化的原因。
流程:
问题由来:设类或接口类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设计模式之单一职责原则的更多相关文章
- 北风设计模式课程---单一职责原则(Single Responsibility Principle)
北风设计模式课程---单一职责原则(Single Responsibility Principle) 一.总结 一句话总结: 一个类应该有且只有一个变化的原因:单一职责原则(SRP:Single Re ...
- 深入浅出系列第一篇(设计模式之单一职责原则)——从纯小白到Java开发的坎坷经历
各位看官大大们,晚上好.好久不见,我想死你们了... 先说说写这个系列文章的背景: 工作了这么久了,每天都忙着写业务,好久没有好好静下心来好好总结总结了.正好这段时间公司组织设计模式的分享分,所以我才 ...
- 设计模式之单一职责原则(SRP)
自己之前写过一些关于设计模式的博客,但是大部分都写得比较匆忙.现在正好趁年前有时间,笔者打算好好地整理一下自己这块知识结构.开篇的第一个原则就是设计原则里面最简单的一个原则--单一职责原则. 想必大家 ...
- 【设计模式】单一职责原则(SRP)
单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...
- 设计模式之单一职责原则(iOS开发,代码用Objective-C展示)
单一职责原则:就一个类而言,应该只有一个引起它变化的原因. 在iOS开发中,我们会很自然的给一个类添加各种各样的功能,比如随便写一个简单的应用程序,一般都会生成一个viewController类,于是 ...
- java设计模式学习笔记--单一职责原则
单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...
- Java设计模式(2:单一职责原则和依赖倒置原则详解)
一.单一职责原则 不要存在多于一个导致类变更的原因.简单来说,就是一个Class/Interface/Method只负责一项职责. 这句话最为重要的就是这一段:一个Class/Interface/Me ...
- 【设计模式六大原则1】单一职责原则(Single Responsibility Principle)
http://blog.csdn.net/zhengzhb/article/category/926691/1 图片素材来源,java学习手册 ps.内容为自己整理 定义:不要存在多于一个 ...
- C#软件设计——小话设计模式原则之:单一职责原则SRP
前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...
随机推荐
- HttpClient简介 post get -转自ibm
HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 jav ...
- encodeURI(encodeURI(name)) ;文件上传
window.location.href = xxxx?a=encodeURI(encodeURI(name)) ;// 编码name是中文,页面部分需要编码两次name = java.net.URL ...
- PHP基础学习笔记(一)
1.初步了解PHP+ php是一种运行在服务端的跨平台的脚本语言. + php语法: <?php echo "welcome!": ?> php像javascript语 ...
- Winform退出程序
1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit(); 强制所有消息中止,退 ...
- js常用方法收集
JS获取地址栏制定参数值: //获取URL参数的值 function getUrlParam(name){ var reg = new RegExp("(^|&)"+ na ...
- Mysql触发器简明使用
触发器:trigger创建触发器的语法mysql> delimiter $mysql> create trigger 触发器名称 after/before(触发时间) insert/upd ...
- SQL 中delete和truncate区别
1.前者按行删除,后者直接删除数据页 2.前者可带where删除部分,后者只能删除全表 3.前者在事务日志中记录每一行的记录,后者只记录页的释放 4.前者删除后,标识技术值不重置,后者重置 5.由fo ...
- FLEX 特效
一.简介: flex特效是ria应用程序的rich的重要组成部分. EffectManager类管理所有的特效实例以避免不必要的定时器和方法调用造成的内内存使用过大.一个效果由两部分组成:一是效果的E ...
- nginx软负载的搭建
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,在高连接并发的情况下Nginx 是 Apa ...
- 有关C,C++,C#, Java的图形图像处理类库 整理(未完待续)
1.Java相关 1.1 Jzy3D Jzy3D 是一个Java的类库,用来绘制各种各样的三维图形,如下图所示: 下载地址:jzy3d-api,官网 1.2 Proscene 是一个用于创建交互式3D ...