结构型模式:Proxy 代理模式
目录

代理模式(Proxy):为另一个对象提供一种代理以控制对这个对象的访问。

代理的类型:

  • Remote Proxy: 代理远程对象(RMI, JNI)
  • Virtual Proxy: 代理创建开销大的资源
  • Porection Proxy: 代理权限受控的资源
  • Smart Proxy: 代理简单指针(Smart Pointer)
class Subject {
public:
virtual void func1() = 0;
virtual void func2() = 0;
};


class RealSubject : public Subject {
public:
void func1() {...}
void func2() {...}
};


class Proxy : public Subject{
public:
Proxy(Subject *_sub):sub(_sub){}
void func1() {
...
sub->func1();
}

void func2() {
...
sub->func2();
}
private:
Subject *sub;
}

使用Subject定义要代理对象的访问接口。 真正服务的对象在RealSubject中实现。 Proxy类对代理对象的每一个接口做一个Wrapper。 用户通过访问Proxy对象间接访问RealSubject对象。

动态代理

上述方法需要开发者在Proxy类中对Subject的接口一一实现,这种代理方法称为静态代理。 Java依赖其语言的反射机制(reflect),可以实现动态代理。 这使得Java开发者不用手工编写代理类,只要简单地指定一组接口(Subject)及委托类(RealSubject)对象, 便能动态地获得代理类。

发表评论