2单一职责原则SRP
一、什么是单一职责原则
单一职责原则(Single Responsibility Principle ): 就一个类而言,应该仅有一个引起它变化的 原因。
二、多功能的山寨手机
山寨手机的功能: 拍照、摄像、手机游戏、网络摄像头、GPS、炒股 等等。
功能多、但是每一个功能都不强。
拍摄功能 ------>专业摄像机或照相机
手机游戏 ------>PSP
网络摄像头---->专业摄像头
GPS功能------>专业GPS导航系统
三、烦人的山寨手机
每一个职责都是一个变化的轴线,当需求变化 时会反映为类的职责的变化。如果一个类承担的 职责多于一个,那么引起它变化的原因就有多个。 一个职责的变化甚至可能会削弱或者抑制类完成 其他职责的能力,从而导致脆弱的设计。
四、单一职责原则示例
接受客户端输入并提交到数据库。
原有设计: 一个类负责接受客户端输入,对客户端输入进 行校验,连接数据库,并提交数据到数据库。
现有设计: 一个功能也就是一个职责由一个类来负责。
原有设计:
import java.util.Scanner; public class SaveToDB {
private String username;
private String upassword; //获得客户端输入
public void shuru() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名");
username = scanner.nextLine();
System.out.println("请输入密码");
upassword = scanner.nextLine();
} //进行数据校验
public boolean validate() {
if(username == null || "".equals(username.trim())) {
System.out.println("用户名不能为空");
return false;
}
if(upassword == null || "".equals(upassword.trim())) {
System.out.println("密码不能为空");
return false;
}
return true;
} //连接数据库
public void getConnection() {
System.out.println("获得数据库连接");
} //进行数据操作
public void save() {
System.out.println("将" + username + "保存到了数据库");
System.out.println("将" + upassword + "保存到了数据库");
}
}
测试
public class MainClass {
public static void main(String[] args) {
//接受客户端的输入
SaveToDB std = new SaveToDB();
std.shuru();
if(std.validate()) {
std.getConnection();
std.save();
}
}
}
==========================================================================
现有设计:
客户端输入
import java.util.Scanner; public class Input {
private String username;
private String upassword; //获得客户端输入
public void shuru() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名");
username = scanner.nextLine();
System.out.println("请输入密码");
upassword = scanner.nextLine();
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getUpassword() {
return upassword;
} public void setUpassword(String upassword) {
this.upassword = upassword;
}
}
数据操作
public class DAOImp {
//进行数据操作
public void save(String username,String upassword) {
System.out.println("将" + username + "保存到了数据库");
System.out.println("将" + upassword + "保存到了数据库");
}
}
连接数据库
public class DBManager {
//连接数据库
public static void getConnection() {
System.out.println("获得数据库连接");
}
}
数据校验
public class Validator {
//进行数据校验
public boolean validate(String username, String upassword) {
if(username == null || "".equals(username.trim())) {
System.out.println("用户名不能为空");
return false;
}
if(upassword == null || "".equals(upassword.trim())) {
System.out.println("密码不能为空");
return false;
}
return true;
}
}
测试
public class MainClass {
public static void main(String[] args) {
Input input = new Input();
input.shuru();
Validator validator = new Validator();
if(validator.validate(input.getUsername(), input.getUpassword())){
DBManager.getConnection();
DAOImp dao = new DAOImp();
dao.save(input.getUsername(), input.getUpassword());
}
}
}
2单一职责原则SRP的更多相关文章
- C#软件设计——小话设计模式原则之:单一职责原则SRP
前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...
- 电商架构设计-通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性
个人观察 1.通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性. 2.单一职责原则SRP,真的很关键,广大程序员需要不断深入理解这个原则. 3.架构图是架构师的重要输出,通过图 ...
- 架构师之路——单一职责原则SRP (我单纯,我快乐)
定义: 不要存在多于一个导致类变更的原因.通俗地讲,一个类只做一件事情. 单一职责原则的好处: 1.类的复杂性降低,实现什么职责都有清晰明确的定义: 2.可读性提高,复杂性降低,那当然可读性提高了 ...
- 【设计模式】单一职责原则(SRP)
单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...
- 【面向对象设计原则】之单一职责原则(SRP)
单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...
- 面向对象的六大原则之 单一职责原则——SRP
SRP = Single Responsibility Principle 定义:就一个类而言,应该只有一个能引起他变化的原因.通俗的说,即一个类只负责一项职责. 作用: 1.减少了类之间的耦 ...
- 设计模式值六大原则——设计模式之六大原则——单一职责原则(SRP)
定义: 应该有且仅有一个原因引起类的变更. There should never be more than one reason for a class to change. 优点: 1.类的复杂性降 ...
- 单一职责原则SRP
定义: There should nerver be more then one reason for a class to change. 优点: 1.类的复杂性降低,实现什么职责都有清晰明确的定义 ...
- IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
定义 就一个类而言,应该仅有一个引起它变化的原因. 定义解读 这是六大原则中最简单的一种,通俗点说,就是不存在多个原因使得一个类发生变化,也就是一个类只负责一种职责的工作. 优点 类的复杂度降低,一个 ...
随机推荐
- 阿里云服务器安装postgresql
https://blog.csdn.net/wlwlwlwl015/article/details/52399739 安装oracle http://www.cnblogs.com/vesaa/p/9 ...
- 原生ajax请求
$('#send').click(function(){ //请求的5个阶段,对应readyState的值 //0: 未初始化,send方法未调用: //1: 正在发送请求,send方法已调用: // ...
- React组件通信技巧
效果图 communication.gif 点击查看Github完整源码 1.父向子通信 直接标签中插入参数即可 //number只是个例子 let _number = this.state.numb ...
- D3
D3.js是一个JavaScript库,它可以通过数据来操作文档.D3可以通过使用HTML.SVG和CSS把数据鲜活形象地展现出来.D3严格遵循Web标准,因而可以让你的程序轻松兼容现代主流浏览器并避 ...
- 命令行:增强版 | Linux 中国
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/83542677 以下就是我如今使用的用于 ...
- mac 下apache服务的根目录
根据文章的介绍 http://jingyan.baidu.com/article/67508eb434539f9cca1ce4da.html apache服务的根目录是在 /Library/WebSe ...
- google map 路线服务
入门指南 使用 Google Maps JavaScript API 中的路线服务之前,首先要确保在为 Google Maps JavaScript API 设置的同一项目的 Google API C ...
- JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)
JSTL JSTL简单介绍: JSTL的全称:JSP Standard Tag Library,JSP标准标签库 JSTL的作用: 提供给Java Web开发者一个标准通用的标签函数库 和E ...
- ubuntu 16.04 源代码安装libusb
libusb是一个跨平台的usb通讯库:https://libusb.info/ 在ubuntu16上安装 1. 首先安装 libudev-dev sudo apt-get install libud ...
- grid - 网格项目对齐方式(Box Alignment)
CSS的Box Alignment Module补充了网格项目沿着网格行或列轴对齐方式. <view class="grid"> <view class='ite ...