SRP(Single Responsibility Principle) 单一职责原则

SRP的意思就是一个类只有一个引起他变化的原因,怎么理解,就是将稳定的部分封装在

一个class里面,变化的部分用接口隔离起来。

public interface IDBAction {

   void add();

   void delete();

}

public class DBManager implements IDBAction {

@Override

public void add() {

if (isLegalUser()) {

DebugLog.log("add action");

}

}

@Override

public void delete() {

if (isLegalUser()) {

DebugLog.log("delete action");

}

}

private boolean isLegalUser() {

return true;

}

}

从面的case不难想到,因为业务需要,在add/delete之前都需要判断该用户的权限,导致如果isLegalUser的逻辑发生变化,这个包含这个方法的方法
都需要改变,作为一位合格的程序要意识到应该将次变化隔离:
首先添加一个接口:
public interface IUserChecker {
   boolean isLegalUser();
}
 
public class TnUserChecker implements IUserChecker {
 
@Override
public boolean isLegalUser() {
// TODO Auto-generated method stub
return true;
}
 
}
将manager重构如下:
public class DBManager implements IDBAction {
 
private IUserChecker checker;
 
public void setChecker(IUserChecker checker) {
this.checker = checker;
}
 
@Override
public void add() {
if (checker.isLegalUser()) {
DebugLog.log("add action");
}
 
}
 
@Override
public void delete() {
if (checker.isLegalUser())  {
DebugLog.log("delete action");
}
 
}
}
这样isLegalUser的变化和DBManager 的关联不是那么密切,有一天如果isLegalUser从数据库
验证变成jndi验证,只需要变相应的实现就可以了。
 
原文地址:https://www.cnblogs.com/budoudou/p/2299617.html