代理模式
代理模式
代理模式又叫Proxy模式(英文)。所謂的代理,就是一個人或者一個機構(gòu)代替另一個人或者另一個機構(gòu)去做一些事情。(類似于中介或者代理商)。
Windows操作系統(tǒng)里面的例子 eg: 快捷方式
代理模式的結(jié)構(gòu)
代理模式所涉及的角色有:
抽象主題角色:聲明了真實主題與代理主題的共同接口(共有的特性)
代理主題角色:含有對真實主題角色的引用(操作真實主體對象),代理角色通常在將客戶端調(diào)用傳遞給真實主題對象的之前或者之后都會執(zhí)行某些操作(方法),而不是只單純的返回真實的對象。
真實主題角色:定義了代理角色所代表的真實對象。
在代理模式里,有一個很重要的東西
動態(tài)代理
自從JDK的版本到1.3以后,java語言通過java.lang.reflect庫中,提供了三個類來直接支持代理模式。
分別是:Proxy,InvocoationHandler和Method。
一個例子:電腦代理商
抽象主題角色:SaleComputer
代理主題角色:ComputerProxy
真是主體角色:ComputerMaker
時序圖:

源代碼 http://www.aygfsteel.com/Files/vjame/ProxyDemo.rar
代理模式又叫Proxy模式(英文)。所謂的代理,就是一個人或者一個機構(gòu)代替另一個人或者另一個機構(gòu)去做一些事情。(類似于中介或者代理商)。
Windows操作系統(tǒng)里面的例子 eg: 快捷方式
代理模式的結(jié)構(gòu)
代理模式所涉及的角色有:
抽象主題角色:聲明了真實主題與代理主題的共同接口(共有的特性)
代理主題角色:含有對真實主題角色的引用(操作真實主體對象),代理角色通常在將客戶端調(diào)用傳遞給真實主題對象的之前或者之后都會執(zhí)行某些操作(方法),而不是只單純的返回真實的對象。
真實主題角色:定義了代理角色所代表的真實對象。
《西游記》中的代理模式
高老莊的高家小姐,大徒弟孫悟空,未歸依我佛的八戒。
悟空代替了高家小姐去和八戒見面,然后制服了八戒。
抽象主題角色:Miss Gao 樣貌和舉止行為
代理主題角色:孫悟空,擁有Miss Gao的樣貌和舉止行為,還有另外的一個功能(制服八戒)
真是主體角色: Miss Gao
在代理模式里,有一個很重要的東西
動態(tài)代理
自從JDK的版本到1.3以后,java語言通過java.lang.reflect庫中,提供了三個類來直接支持代理模式。
分別是:Proxy,InvocoationHandler和Method。
一個例子:電腦代理商
抽象主題角色:SaleComputer
代理主題角色:ComputerProxy
真是主體角色:ComputerMaker
時序圖:

1 package org.jzkangta.proxydemo;
2
3 abstract class SaleComputer{
4 abstract public void SaleComputer();
5 }
6 //真實的主題角色(ComputerMaker)
7 class ComputerMaker extends SaleComputer{
8 public void SaleComputer(){
9 System.out.println("賣出了一臺電腦。。。");
10 }
11 }
12 //代理的主題角色(ComputerProxy)
13 class ComputerProxy extends SaleComputer{
14 ComputerMaker cm=null;
15 public void youHui(){
16 System.out.println("我給你優(yōu)惠
.");
17 }
18 public void giveMouse(){
19 System.out.println("我還送你一個鼠標(biāo)。。。");
20 }
21 public void SaleComputer(){
22 youHui();
23 giveMouse();
24 if(cm==null){
25 cm=new ComputerMaker();
26 }
27 cm.SaleComputer();
28 }
29 }
30 public class ProxyDemo {
31
32
33 public static void main(String[] args) {
34 //SaleComputer sc=new ComputerMaker();
35 SaleComputer sc=new ComputerProxy();
36 sc.SaleComputer();
37
38 }
39
40 }
41
2
3 abstract class SaleComputer{
4 abstract public void SaleComputer();
5 }
6 //真實的主題角色(ComputerMaker)
7 class ComputerMaker extends SaleComputer{
8 public void SaleComputer(){
9 System.out.println("賣出了一臺電腦。。。");
10 }
11 }
12 //代理的主題角色(ComputerProxy)
13 class ComputerProxy extends SaleComputer{
14 ComputerMaker cm=null;
15 public void youHui(){
16 System.out.println("我給你優(yōu)惠

17 }
18 public void giveMouse(){
19 System.out.println("我還送你一個鼠標(biāo)。。。");
20 }
21 public void SaleComputer(){
22 youHui();
23 giveMouse();
24 if(cm==null){
25 cm=new ComputerMaker();
26 }
27 cm.SaleComputer();
28 }
29 }
30 public class ProxyDemo {
31
32
33 public static void main(String[] args) {
34 //SaleComputer sc=new ComputerMaker();
35 SaleComputer sc=new ComputerProxy();
36 sc.SaleComputer();
37
38 }
39
40 }
41
源代碼 http://www.aygfsteel.com/Files/vjame/ProxyDemo.rar
posted on 2008-10-29 17:04 lanjh 閱讀(272) 評論(0) 編輯 收藏 所屬分類: 設(shè)計模式