您的位置:首页 > 其它

设计模式之代理模式之二(Proxy)

2012-05-23 20:49 471 查看

0.前言

在前面一篇博客设计模式之代理模式(Proxy)中我们已经讲解了一部分代理模式,下面我们继续讲解代理的有关内容,包括代理的分类以及java中的代理。

1.代理的分类

  事实上代理能够被分为很多种类,大致有如下这些:虚代理、远程代理、copy-on-write代理、保护代理、Cache代理、防火墙代理、同步代理、智能指引。在这里我们会介绍虚代理和保护代理。

  在设计模式之代理模式(Proxy)中提到的代理就是一个典型的虚代理的实现。起初每个代理对象只有用户编号和姓名数据,直到需要的时候,才会把整个用户的数据装载到内存中来。也就是说,要根据需要来装载整个UserModel的数据,虽然用户数据对象时前面已经创建好了的,但是只有用户编号和姓名的数据,可以看成是一个“虚”的对象,知道通过代理把所有的数据都设置好,才算是一个完整的用户数据对象。

  保护代理是一种控制对原始对象访问的代理,多用于对象应该有不同的访问权限的时候。保护代理会检查调用者是否具有请求所必需的访问权限,如果没有相应的权限,那么就不会调用目标对象,从而实现对目标对象的保护。

2.java中的代理

2.1静态代理

  通常把前面自己实现的代理模式成为Java的静态代理。这种实现方式有一个较大的缺点,就是如果Subject接口发生变化,那么代理类和具体的目标实现类都要变化,不是很灵活。而使用Java内建的对代理模式支持的功能来实现则不需要修改代理类。静态代理的代码实例如下所示:

(1)创建Subject接口

View Code

package edu.sjtu.erplab.dynamicproxy;

public class DynamicProxyDemo {

public static void main(String[] args) {
//实例化代理操作类
MyInvocationHandler hander=new MyInvocationHandler();
//绑定实际对象
Subject sub=(Subject) hander.bind(new RealSubject());
String info=sub.say("xuwei", 25);
System.out.println(info);
}
}


输出结构

class $Proxy0
say
[xuwei, 25]
姓名:xuwei,年龄:25
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: