代理模式的分类书上已经说的很详细了,我在这里就不赘述
1、代理模式的定义
代理模式——就是给某一个对象提供一个代理,并由代理对象控制对原对象的引用。在一些情况下,一个客户不想或者不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。例如:电脑桌面的快捷方式就是一个代理对象,快捷方式是它所引用的程序的一个代理。
2、代理模式的类图
- Subject是公共的抽象类,能够声明所有子类的引用,
- Proxy类为代理类,代理类内部含有对真实类的引用,从而可以操作真实对象
- RealSubject为真实类,定义了代理角色所代表的真实对象
java代码如下:
package 代理模式;
public class Proxymode {
@SuppressWarnings("unused")
public static void main(String[] args) {
// TODO Auto-generated method stub
Subject a1;
a1 = new Proxy();
a1.request();
}
}
abstract class Subject { //定义抽象类
public abstract void request();
}
class RealSubject extends Subject{
public void request(){
System.out.println("这是一个真实的类的调用");
}
}
class Proxy extends Subject{
private RealSubject realsubject;
@Override
public void request() {
// TODO Auto-generated method stub
System.out.println("这是一个代理类的方法调用");
try {
realsubject.request();//调用RealSuject类中的request
System.out.println("真实类调用成功!");
}
catch(Exception e)
{
System.out.println("真实类调用失败!");
}
}
public Proxy() {
realsubject = new RealSubject();//构造初始化realsubject
}
public void prerequest() {
System.out.println("我好像忘了真实类的方法");//实现prerrequest方法
}
public void postrequest() {
System.out.println("哦!真实类的方法是这样的啊1");//实现postrequest方法
}
}
4、代理模式的优点
- 代理模式能够将调用用于真正被调用的对象隔离,在一定程度上降低了系统的耦合度;
- 代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代理对象可以在对目标对象发出请求之前进行一个额外的操作,例如权限检查等。
- 职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
- 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
- 高扩展性。
- 安全性高。
5、反思
- 由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢。
- 实现代理类也需要额外的工作,从而增加了系统的实现复杂度。
- 不适用于小系统开发,会有大量代码冗余。