定义
不要存在多于一个导致类变更的原因。体现在一个类/接口/方法只负责一项职责。
优点
降低类的复杂度、提高类的可读性,提高系统的可维护性,降低变更引起的风险。
详解
在类的级别上,可以定义不同的类实现不同的功能,在接口级别上,可以根据功能抽象出不同的接口,然后按需要实现一个或多个接口。方法级别上,可以做到不同的方法实现不同的操作。
要点讲解
1 2 3 4
| 1. 实际应用中,类不采用单一职责,接口和方法采用单一职责。 2. 定义:单一职责规定 一个类,接口或者方法,只有一个变化的原因 3. 优点:降低类的复杂性,提高可读性,维护时风险降低 4. 实际应用,受依赖,组合,聚合这些关系影响,同时受控于项目规模,项目周期,技术人员水平,对进度把控等影响。应适当的应用单一职责原则
|
简单需求说明
完成不同功能,并且使设计模块具有可读性和可维护性。可以使用不同的类或接口或方法去完成某一类功能,这样就显得单一,具有针对性。
类的单一职责原则
实体类1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| package com.design.pattern.principle.singleresponsibility;
import lombok.extern.slf4j.Slf4j;
@Slf4j public class WalkBird {
public void moveMode(String birdName){ log.info(birdName + "陆地奔跑"); } } ``` **实体类2** ```java package com.design.pattern.principle.singleresponsibility;
import lombok.extern.slf4j.Slf4j;
@Slf4j public class FlyBird {
public void moveMode(String birdName){ log.info(birdName + "用翅膀飞"); } } ``` **应用** ```java public class Client { public static void main(String[] args) { WalkBird walkBird = new WalkBird(); walkBird.birdMove("鸵鸟");
FlyBird flyBird = new FlyBird(); flyBird.birdMove("大雁"); } } ```
### 接口的单一职责
**接口1** ```java
public interface IcourseAction { void beginStudy(); void quitStudy(); }
|
接口2
1 2 3 4 5 6 7
|
public interface IcourseContent { String getCourseText(); byte[] getCourseVideo(); }
|
实体类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @Slf4j public class Course implements IcourseAction,IcourseContent{ @Override public void beginStudy() { log.info("开始学习!"); }
@Override public void quitStudy() { log.info("学习完成!"); }
@Override public String getCourseText() { return "Java 资料"; }
@Override public byte[] getCourseVideo() { return new byte[0]; } }
|
方法的单一职责
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class Method {
public String updateUserName(){ return ""; }
public String updateUserPassWord(){ return ""; }
public String updateUserInfo(String userId,String gender){ return " "; } }
|