欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍

发布时间:2025/3/21 asp.net 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 《研磨设计模式》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)前奏介绍的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。