设计模式课程 设计模式精讲 3-6 单一职责原则Coding
1 要点讲解
1.1 需要注意
2 代码演练
2.1 类的单一职责原则demo
2.2 接口的单一职责原则demo
2.3 方法的单一职责原则demo
1 要点讲解
1.1 需要注意
1.1.1 实际应用中,类不采用单一职责,接口和方法采用单一职责。
1.1.2 定义:单一职责规定 一个类,接口或者方法,只有一个变化的原因
1.1.3 优点:降低类的复杂性,提高可读性,维护时风险降低
1.1.4 实际应用,受依赖,组合,聚合这些关系影响,同时受控于项目规模,项目周期,技术人员水平,对进度把控等影响。适当的应用单一职责原则。
2 代码演练
2.1 类的单一职责原则demo
测试类:
package com.geely.design.principle.singleresponsibility;
public class Test {
public static void main(String[] args) {
WalkBird walkBird = new WalkBird();
walkBird.birdMove("鸵鸟");
FlyBird flyBird = new FlyBird();
flyBird.birdMove("大雁");
}
}
实体类1:
package com.geely.design.principle.singleresponsibility;
public class WalkBird {
public void birdMove(String birdName){
System.out.println(birdName+"用脚走!");
}
}
实体类2:
package com.geely.design.principle.singleresponsibility;
public class FlyBird {
public void birdMove(String birdName){
System.out.println(birdName+"用翅膀飞!");
}
}
打印日志:
鸵鸟用脚走!
大雁用翅膀飞!
2.2 接口的单一职责原则demo
接口1:
package com.geely.design.principle.singleresponsibility; /**
* 这个接口和获取内容的接口有先后顺序,只有开始学习,才能获取内容,如果退出学习,就不能在获取内容了,
* 由于职责不同,所以设计两个接口符合单一职责原则
*/
public interface IcourseAction {
void beginStudy();
void quitStudy();
}
接口2:
package com.geely.design.principle.singleresponsibility; /**
* 注,本接口主要是获取课程的内容
*/
public interface IcourseContent {
String getCourseText();//获取课程文本内容
byte[] getCourseVideo();//获取课程的视频
}
实体类:
package com.geely.design.principle.singleresponsibility;
public class Course implements IcourseAction,IcourseContent{
@Override
public void beginStudy() {
}
@Override
public void quitStudy() {
}
@Override
public String getCourseText() {
return null;
}
@Override
public byte[] getCourseVideo() {
return new byte[0];
}
}
2.3 方法的单一职责原则demo
demo:
package com.geely.design.principle.singleresponsibility;
public class Method {
/**
* 正确,单一职责原则,修改用户的名称
* @return
*/
public String updateUserName(){
return "";
}
/**
* 正确,单一职责原则,修改用户的密码
* @return
*/
public String updateUserPassWord(){
return "";
}
/**
* 错误,作为对比
* @return
*/
public String updateUserInfo(String userId,String gender){
return " ";
}
/**
* 错误,作为对比
* @param userId
* @return
*/
public String updateUserInfo2(String userId){
return " ";
}
}
设计模式课程 设计模式精讲 3-6 单一职责原则Coding的更多相关文章
- 北风设计模式课程---单一职责原则(Single Responsibility Principle)
北风设计模式课程---单一职责原则(Single Responsibility Principle) 一.总结 一句话总结: 一个类应该有且只有一个变化的原因:单一职责原则(SRP:Single Re ...
- 设计模式之单一职责原则(SRP)
自己之前写过一些关于设计模式的博客,但是大部分都写得比较匆忙.现在正好趁年前有时间,笔者打算好好地整理一下自己这块知识结构.开篇的第一个原则就是设计原则里面最简单的一个原则--单一职责原则. 想必大家 ...
- 深入浅出系列第一篇(设计模式之单一职责原则)——从纯小白到Java开发的坎坷经历
各位看官大大们,晚上好.好久不见,我想死你们了... 先说说写这个系列文章的背景: 工作了这么久了,每天都忙着写业务,好久没有好好静下心来好好总结总结了.正好这段时间公司组织设计模式的分享分,所以我才 ...
- C#软件设计——小话设计模式原则之:单一职责原则SRP
前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...
- 【设计模式六大原则1】单一职责原则(Single Responsibility Principle)
http://blog.csdn.net/zhengzhb/article/category/926691/1 图片素材来源,java学习手册 ps.内容为自己整理 定义:不要存在多于一个 ...
- 《javascript设计模式与开发实践》--- (单一职责原则)
看的这本书叫<JavaScript设计模式与开发实践> 先规划一下看书的顺序,基础知识我已经大概的浏览了一遍了,没有留下笔记,以后有时间还会补上.本来打算顺着看的.但是我感觉我很难短时间内 ...
- 设计模式笔记:单一职责原则(SRP, Single Responsibility Principle)
1. 单一职责原则核心思想 一个类应该有且只有一个变化的原因. 2. 为什么引入单一职责原则 单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化的中心. 在SRP中,把职责定义为变化的原因 ...
- ZT 设计模式六大原则(1):单一职责原则
zt 设计模式六大原则(1):单一职责原则 分类: 设计模式 2012-02-21 09:52 25059人阅读 评论(65) 收藏 举报 设计模式stringclass编程 (THERE SHOUL ...
- 设计模式六大原则(一):单一职责原则(Single Responsibility Principle)
单一职责(SRP)定义: 不要存在多于一个导致类变更的原因,通俗的说,即一个类只负责一项职责. 问题由来: 类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可 ...
随机推荐
- C++转换构造函数和隐式转换函数
今天是第一次听到C++还有个转换构造函数,之前经常见到默认构造函数.拷贝构造函数.析构函数,但是从没听说过转换构造函数,隐式转换函数也是一样,C++的确是够博大精深的,再次叹服! 其 ...
- springmvc validator和springContext validator的区别
1.springContext validator 依赖于代理实现 MethodValidationInterceptor Set<ConstraintViolation<Object&g ...
- 旋转坐标+前缀和(zqu 25001)
本题题意:在一个矩阵中,去随机一点,设定一个步数K,求出从这个点可以走到的范围的和,求最大值 思路:这个范围的和是一个菱形,我们把他旋转45°,然后成为一个正放的矩阵,求出二维前缀和 然后用前缀和的性 ...
- 吴裕雄 python 机器学习——多维缩放降维MDS模型
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...
- 507,介绍一下标准的css盒子模型?低版本ie的盒子模型有什么不同的?
有两种,IE盒子模型,另外是W3C盒子模型: 盒模型都包括:内容(content),填充(padding),边界(margin),边框(border): 区别:IE的content部分吧border和 ...
- 搭建离线下载aria2 树莓派下搭建,以及图形化界面AriaNG
请参考链接 https://www.htcp.net/3652.html https://www.zrj96.com/post-296.html Aria2自动更新BT Tracker服务器列表的方法 ...
- JavaScript对象,函数,作用域
JavaScript对象 在 JavaScript中,几乎所有的事物都是对象.JavaScript 对象是拥有属性和方法的数据. var car = {type:"Fiat", m ...
- 如何在Linux中显示和设置主机名(适用ubantu、centos等版本)
随着连接到网络的计算机数量越来越多,每一台计算机都需要有一个属性来区别于其它计算机.和现实世界中的人一样,计算机也有一个叫做hostname(主机名)的属性. 什么是hostname 从它的操作手册来 ...
- unittest 改装框架ascii 排序执行用例,按照自己书写先后顺序执行
设计思路: 获取成员变量class.__dict__.keys() filter过滤符合要求成员,由于3.x成员dict属性是支持有序的 # coding=utf-8import unittestfr ...
- AtCoder AGC038 C-LCMs 题解
题目链接:https://agc038.contest.atcoder.jp/tasks/agc038_c?lang=en 题意:给定一个数组,求这个数组中所有数对的LCM之和. 分析:网上看到了很多 ...