成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

精解Java中代理模式的實(shí)現(xiàn)

開發(fā) 后端
代理模式是GOF設(shè)計(jì)模式中的一種,常用于權(quán)限模塊的架構(gòu)設(shè)計(jì),其根本的原理是通過將一個(gè)代理對(duì)象交給調(diào)用者,使得調(diào)用者不能直接使用相應(yīng)的功能模塊,所有的調(diào)用被傳遞給代理對(duì)象,代理對(duì)象負(fù)責(zé)對(duì)真實(shí)模塊完成調(diào)用。

簡(jiǎn)介摘要: 代理模式是GOF設(shè)計(jì)模式中的一種,常用于權(quán)限模塊的架構(gòu)設(shè)計(jì),其根本的原理是通過將一個(gè)代理對(duì)象交給調(diào)用者,使得調(diào)用者不能直接使用相應(yīng)的功能模塊,所 有的調(diào)用被傳遞給代理對(duì)象,代理對(duì)象負(fù)責(zé)對(duì)真實(shí)模塊完成調(diào)用,在調(diào)用者與被調(diào)用者之間建立了一個(gè)隔離帶,我們可以使 代理模式是GOF設(shè)計(jì)模式中的一種,常用于權(quán)限模塊的架構(gòu)設(shè)計(jì),其根本的原理是通過將一個(gè)代理對(duì)象交給調(diào)用者,使得調(diào)用者不能直接使用相應(yīng)的功能模塊,所有的調(diào)用被傳遞給代理對(duì)象,代理對(duì)象負(fù)責(zé)對(duì)真實(shí)模塊完成調(diào)用,在調(diào)用者與被調(diào)用者[bei tiao yong zhe]之間建立了一個(gè)隔離帶,我們可以使用這個(gè)隔離帶進(jìn)行權(quán)限檢查、對(duì)象的延遲[yan chi] 加載等功能的實(shí)現(xiàn)。這里不對(duì)這個(gè)設(shè)計(jì)模式的具體原理多加解釋[jie shi],我們直接通過一個(gè)實(shí)例的編寫來(lái)完成對(duì)代理模式的應(yīng)用[ying yong],在理解了代理模式之后,我們將繼續(xù)介紹 java中提供的一種動(dòng)態(tài)[dong tai]代理技術(shù)與其實(shí)現(xiàn)。

這里我們假設(shè)有一個(gè)用戶管理模塊,這個(gè)模塊提供了添加用戶、刪除用戶的功能。我們現(xiàn)在要使用代理模式來(lái)檢查權(quán)限該如何實(shí)現(xiàn)呢?首先我們需要具有一個(gè)類叫User用來(lái)表示一個(gè)用戶的信息[xin xi],代碼如下:

  1. public class User { 
  2.        private String username; 
  3.        private String password; 
  4.        public User() { 
  5.        } 
  6.        public User(String username, String password) { 
  7.                this.username = username; 
  8.                this.password = password; 
  9.        } 
  10.  } 

為了提供功能模塊,并且希望[xi wang]能夠隔離模塊,我們需要設(shè)計(jì)一個(gè)接口來(lái)定義用戶管理模塊的接口,這里我們定義IUserFace接口,代碼如下:

  1. public interface IUserFace { 
  2.        public void addUser(User user); 
  3.        public void removeUser(User user); 

接下來(lái)為這個(gè)接口編寫一個(gè)真正實(shí)現(xiàn)具體功能的類出來(lái),定義為UserFaceImpl,代碼如下:

  1. public class UserFaceImpl implements IUserFace { 
  2.        public void addUser(User user) { 
  3.                //這里處理相關(guān)的添加用戶的代碼任務(wù) 
  4.                //比如說連接數(shù)據(jù)庫(kù),執(zhí)行相關(guān)的SQL語(yǔ)句 
  5.                System.out.println("Add User Successfully"); 
  6.        } 
  7.        public void removeUser(User user) { 
  8.                //這里處理相關(guān)的刪除用戶的代碼任務(wù) 
  9.                //比如說連接數(shù)據(jù)庫(kù),執(zhí)行相關(guān)的SQL語(yǔ)句 
  10.                System.out.println("Remove User Successfully"); 
  11.        } 

好了,現(xiàn)在我們對(duì)外提供的功能具備了,那么使用者該如何使用這個(gè)功能的實(shí)現(xiàn)類呢?為了讓外界對(duì)具體功能類的使用透明[tou ming]化,我們實(shí)現(xiàn)一個(gè)工廠類來(lái)負(fù)責(zé)創(chuàng)造具體功能模塊的對(duì)象,并以接口的形式提供外界使用,這樣將來(lái)更換相關(guān)模塊的使用將會(huì)比較方便。具體工廠類(FaceFactory)代碼如下:

  1. public class FaceFactory { 
  2.        private static FaceFactory instance; 
  3.        private FaceFactory() { 
  4.        } 
  5.        public static FaceFactory getInstance() { 
  6.                if(instance == null) { 
  7.                        instance = new FaceFactory(); 
  8.                } 
  9.                return instance; 
  10.        } 
  11.        public IUserFace createUserFace() { 
  12.                return new UserFaceImpl(); 
  13.        } 

完成了工廠類的代碼,我們可以使用具體模塊,這里我們編寫一個(gè)App.java來(lái)使用以下具體功能模塊,代碼如下:

  1. public class App { 
  2.        public static void main(String args[]) { 
  3.                User u = new User(); 
  4.                IUserFace uf = FaceFactory.getInstance().createUserFace(); 
  5.                uf.addUser(u); 
  6.        } 

從上面代碼我們可以看到,代碼中并沒有提及UserFaceImpl這個(gè)類,這保證了將來(lái)如果需要跟換UserFaceImpl這個(gè)類的使用,調(diào)用者的代碼將不需要做任何的修改[xiu gai]。好了,現(xiàn)在我們要來(lái)研究一下權(quán)限的問題[wen ti],在這個(gè)例子中,我們可能需要在添加用戶或者刪除用戶的時(shí)候進(jìn)行權(quán)限檢查,符合權(quán)限的才能執(zhí)行相關(guān)動(dòng)作,否則不能執(zhí)行,那么該如何修改[xiu gai]代碼才能更加貼切,而且在實(shí)際的編寫過程中,雖然我們需要權(quán)限模塊,但有時(shí)候?yàn)榱烁玫乜焖贉y(cè)試,我們常常希望暫時(shí)關(guān)閉權(quán)限模塊,如何才能讓這樣的臨時(shí)需求[xu qiu]變得更加容易處理呢?我們現(xiàn)在使用代理模式來(lái)完成這樣的任務(wù),現(xiàn)在繼續(xù)編寫一個(gè)類叫 UserFaceProxy,讓它也實(shí)現(xiàn)IUserFace接口,也許你會(huì)說,不是已經(jīng)有一個(gè)類實(shí)現(xiàn)了這個(gè)接口了嗎?為什么還要寫一個(gè)?不要著急,看完這個(gè)代碼,你就會(huì)了解其中的道理了。

  1. public class UserFaceProxy implements IUserFace { 
  2.        private IUserFace userFace; 
  3.        public UserFaceProxy(IUserFace userFace) { 
  4.                this.userFace = userFace; 
  5.        } 
  6.        public void addUser(User user) { 
  7.                //在這里檢查權(quán)限,如果權(quán)限不合法則拋出[pao chu]異常[yi chang][pao chu yi chang] 
  8.                //如果權(quán)限通過則完成下面的工作 
  9.                userFace.addUser(user); 
  10.        } 
  11.        public void removeUser(User user) { 
  12.                //在這里檢查權(quán)限,如果權(quán)限不合法則拋出[pao chu]異常[yi chang][pao chu yi chang] 
  13.                //如果權(quán)限通過則完成下面的工作 
  14.                userFace.removeUser(user); 
  15.        } 

在代碼中你可以看到,這個(gè)代理類在構(gòu)造對(duì)象的時(shí)候需要傳入一個(gè)實(shí)現(xiàn)了IUserFace接口的類的對(duì)象,當(dāng)代理類對(duì)象的方法[fang fa]被調(diào)用的時(shí)候,首先檢查權(quán)限,如果權(quán)限檢查不通過,那么則拋出[pao chu]異常[yi chang][pao chu yi chang],通過的話則調(diào)用構(gòu)造時(shí)傳入對(duì)象的相應(yīng)方法[fang fa]來(lái)完成真是的工作。這樣的話,我們需要繼續(xù)修改[xiu gai]工廠類的代碼如下:

  1. public class FaceFactory { 
  2.        private static FaceFactory instance; 
  3.        private FaceFactory() { 
  4.        } 
  5.        public static FaceFactory getInstance() { 
  6.                if(instance == null) { 
  7.                        instance = new FaceFactory(); 
  8.                } 
  9.                return instance; 
  10.        } 
  11.        public IUserFace createUserFace() { 
  12.                IUserFace userFace = new UserFaceImpl(); 
  13.                IUserFace proxy = new UserFaceProxy(userFace); 
  14.                return proxy; 
  15.        } 

好了,到這里你是不是已經(jīng)明白了?通過這樣的代理模式我們完成了權(quán)限檢查的隔離處理,當(dāng)需要臨時(shí)關(guān)閉權(quán)限檢查的時(shí)候,我們只需要在如上的代碼中return userFace;就可以了。這就是代理模式在實(shí)際中的應(yīng)用[ying yong]步驟。

原文鏈接:http://201111181922.iteye.com/blog/1270129

【編輯推薦】

  1. JAVA設(shè)計(jì)模式:工廠模式之簡(jiǎn)單工廠
  2. Java自帶的Future多線程模式
  3. 淺述Java枚舉常見7種用法
  4. Java中反射機(jī)制詳解
  5. 淺談設(shè)計(jì)模式五大原則
責(zé)任編輯:林師授 來(lái)源: java軟件樂園的博客
相關(guān)推薦

2009-06-22 13:18:00

代理Java程序

2010-03-09 13:54:05

Linux find命

2011-04-06 11:41:25

Java動(dòng)態(tài)代理

2022-11-03 08:44:24

代理模式Java設(shè)計(jì)模式

2015-10-08 10:58:51

圖片懶加載

2018-08-31 16:07:30

2019-12-10 08:59:55

JVM內(nèi)存算法

2024-04-10 12:27:43

Python設(shè)計(jì)模式開發(fā)

2011-03-23 10:40:51

java代理模式

2025-05-07 03:22:00

2015-09-28 15:59:00

Java動(dòng)態(tài)代理機(jī)制

2010-07-06 09:45:08

Sybase

2021-09-08 07:18:30

代理模式對(duì)象

2011-11-17 14:32:45

Java靜態(tài)代理動(dòng)態(tài)代理

2022-11-30 17:05:33

代碼程序場(chǎng)景

2010-08-12 14:20:41

CISCO常見問題

2012-02-29 09:41:14

JavaScript

2012-01-13 15:59:07

2021-06-29 08:54:23

設(shè)計(jì)模式代理模式遠(yuǎn)程代理

2021-03-07 22:37:17

Go代碼模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 九九精品在线 | 天天拍天天操 | 国产欧美在线视频 | 91在线观看网址 | 午夜av电影 | 国产免费一区二区三区最新6 | 97av视频在线观看 | 中文视频在线 | 久久久五月天 | 五月婷婷丁香 | 91精品国产综合久久精品 | 午夜精品久久久 | 99国产精品视频免费观看一公开 | 色播视频在线观看 | 国产一级在线观看 | 日韩在线精品视频 | 97精品超碰一区二区三区 | 国产精品免费观看视频 | 九色网址 | 日日夜夜草 | 五月综合久久 | 看一级毛片 | 中文字幕综合 | 一级在线观看 | 亚洲视频在线一区 | 毛片免费看的 | 欧美在线网站 | 81精品国产乱码久久久久久 | 国产美女特级嫩嫩嫩bbb片 | 欧美一级片在线看 | 日韩三级 | 亚洲精品区 | 国产特级毛片aaaaaa喷潮 | 在线播放一区二区三区 | 在线视频日韩 | 天天干天天插 | 一区二区三区在线电影 | 欧美视频二区 | 国产精品欧美一区二区三区不卡 | 精品国产青草久久久久福利 | 99欧美精品 |