《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍
生活随笔
收集整理的這篇文章主要介紹了
《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
場景:分配人員對各種數(shù)據(jù)表的權(quán)限,并驗證權(quán)限操作。
eg.
1. 正常編碼(不使用模式)
public class TestDB {//用來存放授權(quán)數(shù)據(jù)的值 public static Collection<String> colDB = new ArrayList<String>(); static{//通過靜態(tài)塊來填充模擬的數(shù)據(jù) colDB.add("張三,人員列表,查看");colDB.add("李四,人員列表,查看");colDB.add("李四,薪資數(shù)據(jù),查看");colDB.add("李四,薪資數(shù)據(jù),修改");//增加更多的授權(quán)數(shù)據(jù)for(int i=0;i<3;i++){colDB.add("張三"+i+",人員列表,查看");}} }public class AuthorizationModel { private String user;//人員 private String securityEntity;//安全實體 private String permit;//權(quán)限get/set }public class SecurityMgr {private static SecurityMgr securityMgr = new SecurityMgr();private SecurityMgr(){ }public static SecurityMgr getInstance(){return securityMgr;}//在運行期間,用來存放登錄人員對應(yīng)的權(quán)限 private Map<String,Collection<AuthorizationModel>> map = new HashMap<String,Collection<AuthorizationModel>>();// 模擬登錄的功能 public void login(String user){//登錄的時候就需要把該用戶所擁有的權(quán)限,從數(shù)據(jù)庫中取出來,放到緩存中去Collection<AuthorizationModel> col = queryByUser(user);map.put(user, col);}//判斷某用戶對某個安全實體是否擁有某權(quán)限 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+"沒有登錄或是沒有被分配任何權(quán)限");return false;}for(AuthorizationModel am : col){//輸出當(dāng)前實例,看看是否同一個實例對象System.out.println("am=="+am);if(am.getSecurityEntity().equals(securityEntity) && am.getPermit().equals(permit)){return true;}}return false;}//從數(shù)據(jù)庫中獲取某人所擁有的權(quán)限 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) {//需要先登錄,然后再判斷是否有權(quán)限SecurityMgr mgr = SecurityMgr.getInstance();mgr.login("張三");mgr.login("李四"); boolean f1 = mgr.hasPermit("張三","薪資數(shù)據(jù)","查看");boolean f2 = mgr.hasPermit("李四","薪資數(shù)據(jù)","查看"); System.out.println("f1=="+f1);System.out.println("f2=="+f2);for(int i=0;i<3;i++){mgr.login("張三"+i);mgr.hasPermit("張三"+i,"薪資數(shù)據(jù)","查看");}} 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的《研磨设计模式》chap20 享元模式 Flyweight (1)前奏介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《研磨设计模式》chap9 原型模式Pr
- 下一篇: 《研磨设计模式》chap20 享元模式