Java设计模式七大原则之单一职责原则详解
作者:温故知新之java 发布时间:2022-05-12 20:48:58
标签:Java,设计模式,单一职责原则
定义
单一职责原则(Single Responsibility Principle, SRP),有且仅有一个原因引起类的变更。简单来说,就是针对一个java类,它应该只负责一项职责。例如一个Test.java类,它有两个职责:职责1,职责2。当职责1进行修改时,有可能影响到职责2,所以需要将Test.java类拆分成Test1.java和Test2.java两个单一职责的类。
案例
需求
有一个交通工具类,里面定义一个在各种交通工具的方法,创建交通工具的实例,调用方法,方法内执行打印操作
方案一
定义交通工具类Transportation.java
public class Transportation {
/**
* 汽车
* @author: liyajie
* @date: 2022/1/28 14:45
* @param car
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public static void car(String car) {
System.out.println(car + "在公路上跑");
}
/**
* 火车
* @author: liyajie
* @date: 2022/1/28 14:45
* @param train
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public static void train(String train) {
System.out.println(train + "在铁轨上跑");
}
/**
* 飞机
* @author: liyajie
* @date: 2022/1/28 14:45
* @param airplane
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public static void airplane(String airplane) {
System.out.println(airplane + "在天上飞");
}
定义测试类Test1.java
public class Test1 {
public static void main(String[] args) {
Transportation transportation1 = new Transportation();
transportation1.car("汽车");
transportation1.train("火车");
transportation1.airplane("飞机");
}
}
方案二
定义汽车类Car.java
public class Car {
/**
* 汽车
* @author: liyajie
* @date: 2022/1/28 14:45
* @param car
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public void car(String car) {
System.out.println(car + "在公路上跑");
}
}
定义火车类Train.java
public class Train {
/**
* 火车
* @author: liyajie
* @date: 2022/1/28 14:45
* @param train
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public void train(String train) {
System.out.println(train + "在铁轨上跑");
}
}
定义飞机类Airplane.java
public class Airplane {
/**
* 飞机
* @author: liyajie
* @date: 2022/1/28 14:45
* @param airplane
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public void airplane(String airplane) {
System.out.println(airplane + "在天上飞");
}
}
定义测试类Test2.java
public class Test2 {
public static void main(String[] args) {
Car car = new Car();
car.car("汽车");
Train train = new Train();
train.train("火车");
Airplane airplane = new Airplane();
airplane.airplane("飞机");
}
}
对比分析
方案一,是将汽车,火车,飞机的方法都写在了同一个类里,但是每个交通工具都有自己的方法,做到了方法上的单一职责,如果发生变更,该方案改动较小,但有一定的误操作风险
方案二,是将汽车,火车,飞机分别创建三个类,每个类里只有一种交通工具的方法,做到了类上的单一职责,如果发生变更,该方案改动较大,没有误操作风险
来源:https://juejin.cn/post/7058150940045475877


猜你喜欢
- 1. 公共字段自动填充1.1 问题分析在新增员工时需要设置创建时间、创建人、修改时间、修改人等字段,在编辑员工时需要设置修改时间、修改人等字
- 本文实例通过前面学过的Paint、Canvas等2D绘画技术来实现在手机屏幕上绘制Android机器人。具体代码实现和效果:用来显示自定义的
- Get请求1.简单发送Get请求/// <summary>/// 指定Url地址使用Get 方式获取全部字符串/// </
- Maven搭建springboot项目本文是基于Windows 10系统环境,使用Maven搭建springboot项目Windows 10
- Android RollPagerView实现轮播图android图片轮播效果,RollViewPager的简单使用 <c
- 简介我们在前面的Android教程中已经提到过这么一件事:Android在启动后会有一个主线程。它不允许任何子线程去改变主UI线程里的内容。
- 最近有一个实现一个带有圆角的ImageView的需求,在网上找了找三方,虽然Demo都是正确的,但是移植过来就不可以了,因为请求链接的时候用
- WPF 使用 DrawingContext 绘制刻度条框架使用大于等于.NET40;Visual Studio 2022;项目使用 
- 准备:(1) IDEA 2021(2)Java 1.8(3)数据库 MySQL 5.7 (SQLyog 或 Navicat)在 MySQL
- Nacos 的部署,我使用的时docker 部署(单机模式 Mysql),官网文档:https://nacos.io/zh-cn/docs/
- 需求描述 今日需求是删除资源时同时删除与该资源绑定的角色数据,有两张表,资源表、
- 字符串采用unicode编码的方式时,计算字符串长度的方法找出UNICODE编码中的汉字的代表的范围“\u4E00” 到“\u9FBB”之间
- 最近在做一个搜索相关的项目,需要爬取网络上的一些链接存储到索引库中,虽然有很多开源的强大的爬虫框架,但本着学习的态度,自己写了一个简单的网络
- 本篇文章介绍selenium 操作浏览器阅读目录浏览器最大化 前进,后退, 刷新截图操作模拟鼠标操作杀掉Windows浏览器进程浏览器最大化
- 在[高并发Java 二] 多线程基础中,我们已经初步提到了基本的线程同步操作。这次要提到的是在并发包中的同步控制工具。1. 各种同步控制工具
- 一、So的热升级尝试在Android代码中,加载so库是通过调用System.loadLibrary函数实现的。但和Android的许多特性
- eclipse中改变默然的workspace的方法可以有以下几种:1.在创建project的时候,手动选择使用新的workspace,如创建
- C#是一种编译型的语言,程序执行,首先要经过编译器编译,如何让C#像一种脚本一样,在要执行的时候,进行编译,这里,我们可以用Microsof
- pom.xml文件中添加如下配置项创建maven项目后,在pom.xml文件中添加如下配置项:<properties> &nbs
- 本文实例讲述了C#编程获取IP地址的方法。分享给大家供大家参考,具体如下:1、获取客户端IP/// <summary>/// 获