代理模式
代理模式又叫Proxy模式(英文)。所谓的代理,就是一个人或者一个机构代替另一个人或者另一个机构去做一些事情。(类似于中介或者代理商)。
Windows操作系统里面的例子 eg: 快捷方式
代理模式的结构
代理模式所涉及的角色有:
抽象主题角色:声明了真实主题与代理主题的共同接口(共有的特性)
代理主题角色:含有对真实主题角色的引用(操作真实主体对象),代理角色通常在将客户端调用传递给真实主题对象的之前或者之后都会执行某些操作(方法),而不是只单纯的返回真实的对象。
真实主题角色:定义了代理角色所代表的真实对象。
《西游记》中的代理模式
高老庄的高家小姐,大徒弟孙悟空,未归依我佛的八戒。
悟空代替了高家小姐去和八戒见面,然后制服了八戒。
抽象主题角色:Miss Gao 样貌和举止行为
代理主题角色:孙悟空,拥有Miss Gao的样貌和举止行为,还有另外的一个功能(制服八戒)
真是主体角色: Miss Gao
在代理模式里,有一个很重要的东西
动态代理
自从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("我给你优惠.");
17 }
18 public void giveMouse(){
19 System.out.println("我还送你一个鼠标。。。");
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.blogjava.net/Files/vjame/ProxyDemo.rar