单一职责原则
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.after;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 课程实现类
|
||||
* 接口实现单一职责后可以通过实现类多重实现的方式组合
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-22 10:46
|
||||
*/
|
||||
@Slf4j
|
||||
public class CourseImpl implements CourseInfo, CourseManagement {
|
||||
@Override
|
||||
public String getCourseName() {
|
||||
return "设计模式课程";
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getCourseVideo() {
|
||||
return new byte[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paid() {
|
||||
log.info("支付成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void studyCourse() {
|
||||
log.info("学习课程");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.after;
|
||||
|
||||
/**
|
||||
* 一个接口变更,只对一个实现类有影响,对其他接口无关
|
||||
* 只承担课程信息相关职责
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-22 10:45
|
||||
*/
|
||||
public interface CourseInfo {
|
||||
String getCourseName();
|
||||
|
||||
byte[] getCourseVideo();
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.after;
|
||||
|
||||
/**
|
||||
* 只承担课程管理相关职责
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-22 10:46
|
||||
*/
|
||||
public interface CourseManagement {
|
||||
void paid();
|
||||
|
||||
void studyCourse();
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.after;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 当前类只承担一个职责:飞
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-22 10:40
|
||||
*/
|
||||
@Slf4j
|
||||
public class FlyBird {
|
||||
public void mainMoveMode(String name) {
|
||||
log.info("{}用翅膀飞", name);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.after;
|
||||
|
||||
/**
|
||||
* 方法单一职责
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-22 10:57
|
||||
*/
|
||||
public class Method {
|
||||
private String name;
|
||||
private Integer age;
|
||||
|
||||
/**
|
||||
* 此时该方法承担一个职责:更新名字
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public void updateUserName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* 只更新年龄
|
||||
*
|
||||
* @param age
|
||||
*/
|
||||
public void updateUserAge(Integer age) {
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
/**
|
||||
* 对于有布尔值的方法也建议拆分
|
||||
*
|
||||
* @param name
|
||||
* @param bool
|
||||
*/
|
||||
public void updateProperties(String name, boolean bool) {
|
||||
if (bool) {
|
||||
// TODO
|
||||
} else {
|
||||
// TODO
|
||||
}
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.after;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 当前类只承担一个职责:走
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-22 10:40
|
||||
*/
|
||||
@Slf4j
|
||||
public class WalkBird {
|
||||
public void mainMoveMode(String name) {
|
||||
log.info("{}用脚走", name);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.before;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 单一职责:一个类应该只有一个发生变化的原因
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-22 10:35
|
||||
*/
|
||||
@Slf4j
|
||||
public class Bird {
|
||||
/**
|
||||
* 当前类有两个职责:走和飞
|
||||
* 没有使用单一职责当业务变更必须修改代码,带来风险
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public void mainMoveMode(String name) {
|
||||
if ("鸵鸟".equals(name)) {
|
||||
log.info("{}用脚走", name);
|
||||
} else {
|
||||
log.info("{}用翅膀飞", name);
|
||||
}
|
||||
// 当边界值越来越多(承担更多职责)的时候变更变得更加困难
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.before;
|
||||
|
||||
/**
|
||||
* 方法单一职责
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-22 10:57
|
||||
*/
|
||||
public class Method {
|
||||
private String name;
|
||||
private Integer age;
|
||||
|
||||
/**
|
||||
* 此时该方法承担两个职责:更新名字和年龄
|
||||
*
|
||||
* @param name
|
||||
* @param age
|
||||
*/
|
||||
public void updateUserInfo(String name, Integer age) {
|
||||
this.name = name;
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
/**
|
||||
* 承担多个职责,同时包含可变参数,即不一定更新哪些属性
|
||||
*
|
||||
* @param name
|
||||
* @param properties
|
||||
*/
|
||||
public void updateProperties(String name, String... properties) {
|
||||
// TODO 更新用户名和属性
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.before;
|
||||
|
||||
/**
|
||||
* 接口单一职责
|
||||
* 当前接口承担多个职责
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-22 10:43
|
||||
*/
|
||||
public interface SCourse {
|
||||
/**
|
||||
* 课程信息相关职责
|
||||
*/
|
||||
String getCourseName();
|
||||
|
||||
byte[] getCourseVideo();
|
||||
|
||||
/**
|
||||
* 课程管理相关职责
|
||||
*/
|
||||
void paid();
|
||||
|
||||
void studyCourse();
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package top.fjy8018.designpattern.principle.singleresponsibility.before;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import top.fjy8018.designpattern.principle.singleresponsibility.after.FlyBird;
|
||||
import top.fjy8018.designpattern.principle.singleresponsibility.after.WalkBird;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class BirdTest {
|
||||
|
||||
/**
|
||||
* 没有使用单一职责情况
|
||||
*/
|
||||
@Test
|
||||
void mainMoveModeBefore() {
|
||||
Bird bird = new Bird();
|
||||
bird.mainMoveMode("大雁");
|
||||
// 业务变更
|
||||
bird.mainMoveMode("鸵鸟");
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用单一职责后
|
||||
* 不同职责调用交由应用层负责
|
||||
*/
|
||||
@Test
|
||||
void mainMoveModeAfter() {
|
||||
FlyBird flyBird = new FlyBird();
|
||||
flyBird.mainMoveMode("大雁");
|
||||
WalkBird walkBird = new WalkBird();
|
||||
walkBird.mainMoveMode("鸵鸟");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user