zoukankan      html  css  js  c++  java
  • 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验证,只需要变相应的实现就可以了。
     
  • 相关阅读:
    HDU 5546 深搜吧 主要是提取的时候容易重复
    HDU 5543 新型01背包 两端放一半就可以有其价值
    HDU 2586 查找两点之间的距离
    HDU 5652 二分加搜索 http://acm.split.hdu.edu.cn/showproblem.php?pid=5652
    美句
    最短路径问题
    1766 装果子
    Watchcow
    codevs 4768 跳石头
    noi 7219:复杂的整数划分问题
  • 原文地址:https://www.cnblogs.com/budoudou/p/2299617.html
Copyright © 2011-2022 走看看