Proxy模式

interface IService {
	public void execute();
}
class ServiceImpl implements IService {
	public ServiceImpl() {
		System.out.println("ServiceImpl is create");
	}
	@Override public void execute() {
		System.out.println("ServiceImpl.service is running......");
	}
}
public class Proxy implements IService {
	
	private IService service;
	
	public Proxy(IService service) {
		this.service = service;
	}
	
	@Override public void execute() {
		System.out.println("Proxy.service is calling ......");
		this.service.execute();
	}

	public static void main(String[] args) {

		IService proxy = new Proxy(new ServiceImpl());
		proxy.execute();
		
		IService virtualProxy = new VirtualProxy();
		virtualProxy.execute();
	}
}
//虚拟代理
class VirtualProxy implements IService {
	
	private IService service;
	public VirtualProxy() {}
	
	@Override public void execute() {
		System.out.println("VirtualProxy.service is calling ......");
		if (this.service == null)
			this.service = new ServiceImpl();
		this.service.execute();
	}
}

 输出为:

ServiceImpl is create
Proxy.service is calling ......
ServiceImpl.service is running......
VirtualProxy.service is calling ......
ServiceImpl is create
ServiceImpl.service is running......

 * 代理模式:代理类与业务类实现同一个业务接口,代理类通过构造器参数持有业务类对象。
   代理类在实现业务方法时,调用真正的业务对象方法实现业务逻辑,并可以在业务方法中进行权限控制

   以及添加切面逻辑,从而实现对业务类的代理。
 
 * 意图: 为其他对象提供一种代理以控制对这个对象的访问。 
 
 * 远程代理(Remote  Proxy)为一个位于不同的地址空间的对象提供一个本地的代理对象。
 * 虚拟代理(Virtual Proxy)根据需要创建开销很大的对象。如果需要创建一个资源消耗较大的对象,

   先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。
 * 保护代理(Protection Proxy)控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。
 * 延迟加载,用代理模式实现延迟加载的一个经典应用就在 Hibernate 框架里面。
 * 指针引用,是指当调用真实的对象时,代理处理另外一些事。比如计算真实对象的引用次数。

猜你喜欢

转载自jaesonchen.iteye.com/blog/2286899