第 1 章 单一职责原则

*第* *1* *章 单一职责原则*

单一职责原则的英文名称是 Single Responsibility Principle,简称是 SRP

*1)阐述场景*

只要做过项目,肯定要接触到用户、机构、角色管理这些模块,基本上使用的都是

RBAC 模型(Role-Based Access Control,基于角色的访问控制,通过分配和取消角色来完成

用户权限的授予和取消,使动作主体(用户)与资源的行为(权限)分离),确实是一个很

好的解决办法。我们这里要讲的是用户管理、修改用户的信息、增加机构(一个人属于多个

机构)、增加角色等,用户有这么多的信息和行为要维护,我们就把这些写到一个接口中,

都是用户管理类嘛,我们先来看它的类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FyqZ8Mjd-1611823342619)(file:///C:\Users\16221\AppData\Local\Temp\ksohtml11728\wps1.jpg)]

*2)上述设计存在的问题*

用户的属性和用户的行为没有分开

*3)修改之后的设计*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Ef4Zfdm-1611823342624)(file:///C:\Users\16221\AppData\Local\Temp\ksohtml11728\wps2.jpg)]

*4)代码实现*

*1.整体的代码结构*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZVUCn9E-1611823342626)(file:///C:\Users\16221\AppData\Local\Temp\ksohtml11728\wps3.jpg)]

2.最顶层的 IUserInfo

/**

 \* 顶层的IUser 接口

 */

public interface IUserInfo extends IUserBiz,IUserBO{
}

3.IUserInfo 两个子接口 IUserBiz,IUserBO

/**
 \* 负责用户的行为
 */
public interface IUserBiz{
  public boolean changePassword(String password);
}
/**
 \* 负责用户的属性
 */

public interface IUserBO {
  public void setUserID(String userID);
  public String getUserID();
  public void setPassword(String password);
  public String getPassword();
  public void setUserName(String userName);
  public String getUserName();
}

4.两个实现类 IUserBizImpl ,IUserBOImpl

/**

 \* @Description:
 \* @Author 16221
 \* @Date 2021/1/28
 **/

public class IUserBizImpl implements IUserBiz {

  @Override
  public boolean changePassword(String password) {return false;
  }
}
/**

 \* @Description:
 \* @Author 16221
 \* @Date 2021/1/28
 **/

public class IUserBOImpl implements IUserBO {

  @Override
  public void setUserID(String userID) {
  }

 

  @Override
  public String getUserID() {return null;
  }

 

  @Override
  public void setPassword(String password) {
  }

 

  @Override
  public String getPassword() {return null;
  }

 

  @Override

  public void setUserName(String userName) {
  }

 

  @Override
  public String getUserName() {return null;
  }

}

5.测试的场景类 Client

/**

 \* @Description:场景类测试
 \* @Author 16221
 \* @Date 2021/1/28
 **/

@Slf4j
public class Client {

  public static void main(String[] args) {//最顶层接口的实现类
​    IUserInfoImpl userInfo = new IUserInfoImpl();//维护用户信息
​    IUserBO userBO = userInfo;
​    userBO.setUserName("天珩");
​    userBO.setPassword("123");
​    log.info("userInfo :{}",userInfo.getPassword());
​    log.info("userBO :{}",userBO.getPassword());//维护用户行为
​    IUserBiz userBiz = userInfo;
​    userBiz.changePassword("456");
​    log.info("userInfo :{}",userInfo.getPassword());
​    log.info("userBO :{}",userBO.getPassword());
  }
}

 

*5)过程中遇到的问题*

l 接口的多继承,被 java 单继承洗脑了,接口是可以多继承的

l 看这个 类图,很久不翻译了,关系搞反了,谁继承谁,谁实现谁的问题

*6)笔者强烈建议手撸一遍代码,会有不同的理解,之前看书,只是浮于表面,手撸一遍代码之后理解更深刻*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值