代理模式

代理模式概述

客户端不能直接操作B类(目标类),需要通过A类(代理类)调用B类的实例方法来完成最终的逻辑。其中A类和B类需要继承同一父级或者同一接口

UML图

一个简单的示例:

// 客户端操作类和实际操作类的接口(两个类都实现这个接口)
package com.proxy;

public interface Subject {
	public void request();
}
// 实际被操作的类
package com.proxy;

public class RealSubject implements Subject {

	@Override
	public void request() {
		System.out.println("实际需要执行的操作");
	}

}
// 代理类 客户端调用的类
package com.proxy;

public class Proxy implements Subject{
	private RealSubject realSubject;
	@Override
	public void request() {
		if(realSubject == null) {
			realSubject = new RealSubject();
		}
		//调用实际需要调用的实例方法
		realSubject.request();
	}
}
// 客户端代码
package com.proxy;
public class TestMain {
	public static void main(String[] args) {
		Subject operation = new Proxy();
		operation.request();
	}
}

 总结

当我们需要在实际操作的方法之前进行预处理(如添加日志操作,访问次数记录,权限控制判断)或者在之后进行调用后处理(日志处理,缓存等)时,可以使用代理模式,对客户端隐藏了调用目标逻辑的细节。

才疏学浅,如文中有错误,感谢大家指出。

原文地址:https://www.cnblogs.com/runningRookie/p/11108775.html