场景:分配人员对各种数据表的权限,并验证权限操作。
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,"薪资数据","查看");}}

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

  1. 《研磨设计模式》chap20 享元模式 Flyweight (4)总结

    1. 不共享的外部状态 输入数据为: 张三,人员列表,查看,1 李四,人员列表,查看,1 李四,操作薪资数据,2 " 操作薪资数据"包括"薪资数据,查看",&q ...

  2. 《研磨设计模式》chap20 享元模式 Flyweight (2)模式介绍

    1.享元模式的定义 享元:分离出被缓存对象实例中,哪些数据是不变且重复出现的,哪些数据是经常变化的.(内部状态分离出来共享) 对象的内部状态: 不变且重复出现的数据, 对象的外部状态: 变化的数据 运 ...

  3. 设计模式之享元模式(Flyweight)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  4. 《研磨设计模式》chap20 享元模式 Flyweight (3)重写应用场景

    public interface Flyweight {//判断传入的安全实体和权限,是否和享元对象内部状态匹配 public boolean match(String securityEntity, ...

  5. 享元模式 FlyWeight 结构型 设计模式(十五)

    享元模式(FlyWeight)  "享"取"共享"之意,"元"取"单元"之意. 意图 运用共享技术,有效的支持大量细粒度 ...

  6. 设计模式:享元(FlyWeight)模式

    设计模式:享元(FlyWeight)模式 一.前言     享元(FlyWeight)模式顾名思义,既是轻量级的,原因就是享元,共享元素,这里的元素指的是对象.如何共享对象,那就是在检测对象产生的时候 ...

  7. 设计模式(十)享元模式Flyweight(结构型)

    设计模式(十)享元模式Flyweight(结构型) 说明: 相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释 ...

  8. 设计模式(18):结构型-享元模式(Flyweight)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  9. 【设计模式自习室】享元模式 Flyweight Pattern:减少对象数量

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

最新文章

  1. laravel中Crypt加密方法
  2. 计算任何一天是星期几的几种算法
  3. k8s部署etcd数据库集群
  4. DELPHI获取网卡MAC地址 转
  5. 方立勋_30天掌握JavaWeb_JDBC、存储过程、事务(二)
  6. 积米浏览器如何清除浏览数据
  7. java获取列族的列_在cassandra-cli中如何获取表中的所有列名以及如何在java中使用hector获取它?...
  8. Intellij IDEA 2017 如何导入 GitHub 中的项目
  9. linux生产者进程数为3个,linux 多线程面试题_linux 进程线程_linux 线程 进程(3)
  10. 【从零开始学GIS再到精通GIS】专题图制作-地图渲染-地图整饰
  11. 高德地图如何取消订单_一文教你如何爬取高德地图
  12. 有哪些论文降重的方法?
  13. c语言中shift f12组合建,如何在word中将文本框组合快捷键是什么
  14. 绘制神经元的结构模式图,神经元结构示意图简易
  15. 知识普及 上海宝付带你揭穿金融诈骗“小把戏”
  16. BPM平台应用价值(下篇):你想爬爬“流程中台”这座山吗?
  17. uniapp之APP开发
  18. 《庄子·外篇·天运第十四》
  19. 起始2021-01-15
  20. CorelDRAW Graphics Suite 2022

热门文章

  1. instanceof 是什么意思
  2. 计算机二本生不学编程还能干什么6,不建议二本考生报考的6个专业,除非真的感兴趣!...
  3. 数据中心用蓄电池解决方案
  4. 案例 | 铅酸蓄电池精细维护
  5. c语言程序怎么颠倒数据,急求如何将下列C语言程序数据存储到文件中?
  6. seo优化源码_seo按天计费系统,无需登陆批量查询关键词价格
  7. ML之多分类预测之PLiR:使用PLiR实现对六类label数据集进行多分类
  8. BlockChain:《Blockchain Gate》听课笔记——区块链的共识机制—简介、理解、畅谈
  9. 成功解决TypeError: tuple indices must be integers or slices, not str
  10. DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率