代理模式(初步)
定义
访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介
主要优点:
-
在客服端与目标对象之间起到一个中介作用和保护目标对象的作用;
-
代理对象可以扩展目标对象的功能
-
代理模式能将客户端和目标表对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性
主要缺点:
-
造成系统设计中类的数量增加
-
代理对象的增加,会造成处理速度变慢
-
增加了系统的复杂性
那么如何解决以上提到的缺点呢?答案是可以使用动态代理方式
代理模式的结构与实现
-
模式的结构
代理模式的主要角色如下。
-
抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
-
真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
-
代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。
-
-
模式实现
public class ProxyTest{
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.Request();
}
}
//抽象主题 通过接口声明
interface Subject{
void Request();// 真实主题和代理对象实现的业务方法
}
//真实主题 实现接口中的具体业务
class RealSubject class RealSubject {
public void Request(){
System.out.println("访问真实主题方法...");
}
}
//代理实现
class Proxy implements Subject {
private RealSubject realSubject;//定义一个真实主题的对象
public void Request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
preRequest();
realSubject.Request();
postRequest();
}
public void preRequest() {
System.out.println("访问真实主题之前的预处理。");
}
public void postRequest() {
System.out.println("访问真实主题之后的后续处理。");
}
}
运行结果:
访问真实主题之前的预处理。
访问真实主题方法...
博观而约取,厚积而薄发

浙公网安备 33010602011771号