《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍
生活随笔
收集整理的这篇文章主要介绍了
《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
场景:分配人员对各种数据表的权限,并验证权限操作。
eg.
1. 正常编码(不使用模式)
public class TestDB {//用来存放授权数据的值 public static Collection<String> colDB = new ArrayList<String>(); static{//通过静态块来填充模拟的数据 colDB.add("张三,人员列表,查看");colDB.add("李四,人员列表,查看");colDB.add("李四,薪资数据,查看");colDB.add("李四,薪资数据,修改");//增加更多的授权数据for(int i=0;i<3;i++){colDB.add("张三"+i+",人员列表,查看");}} }public class AuthorizationModel { private String user;//人员 private String securityEntity;//安全实体 private String permit;//权限get/set }public class SecurityMgr {private static SecurityMgr securityMgr = new SecurityMgr();private SecurityMgr(){ }public static SecurityMgr getInstance(){return securityMgr;}//在运行期间,用来存放登录人员对应的权限 private Map<String,Collection<AuthorizationModel>> map = new HashMap<String,Collection<AuthorizationModel>>();// 模拟登录的功能 public void login(String user){//登录的时候就需要把该用户所拥有的权限,从数据库中取出来,放到缓存中去Collection<AuthorizationModel> col = queryByUser(user);map.put(user, col);}//判断某用户对某个安全实体是否拥有某权限 public boolean hasPermit(String user,String securityEntity,String permit){Collection<AuthorizationModel> col = map.get(user);if(col==null || col.size()==0){System.out.println(user+"没有登录或是没有被分配任何权限");return false;}for(AuthorizationModel am : col){//输出当前实例,看看是否同一个实例对象System.out.println("am=="+am);if(am.getSecurityEntity().equals(securityEntity) && am.getPermit().equals(permit)){return true;}}return false;}//从数据库中获取某人所拥有的权限 private Collection<AuthorizationModel> queryByUser(String user){Collection<AuthorizationModel> col = new ArrayList<AuthorizationModel>();for(String s : TestDB.colDB){String ss[] = s.split(",");if(ss[0].equals(user)){AuthorizationModel am = new AuthorizationModel();am.setUser(ss[0]);am.setSecurityEntity(ss[1]);am.setPermit(ss[2]);col.add(am);}}return col;}}public static void main(String[] args) {//需要先登录,然后再判断是否有权限SecurityMgr mgr = SecurityMgr.getInstance();mgr.login("张三");mgr.login("李四"); boolean f1 = mgr.hasPermit("张三","薪资数据","查看");boolean f2 = mgr.hasPermit("李四","薪资数据","查看"); System.out.println("f1=="+f1);System.out.println("f2=="+f2);for(int i=0;i<3;i++){mgr.login("张三"+i);mgr.hasPermit("张三"+i,"薪资数据","查看");}} 《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 《研磨设计模式》chap9 原型模式Pr
- 下一篇: 《研磨设计模式》chap20 享元模式