设计模式之Proxy–静态代理(代理模式)

本文深入探讨了代理模式的概念,包括其涉及的角色及其作用。通过具体代码实例展示了如何在Java中实现代理模式,包括如何使用代理角色来封装真实角色的方法,以及在调用真实角色前后执行额外的操作。此外,文章还讨论了代理模式的应用场景和注意事项,特别是当真实角色未知时如何使用Java的动态代理类。
代理模式一遍涉及的角色有
1.抽象角色:声明真实对象和代理对象的共同接口
2.代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作
真实对象,同时代理对象提供与真实对象相同的接口以便在任何时候都能够代替真实对象。同时代理对象可以在执行真实对象操作时,附加其他操作,想当于对真实对象进行封装。
3.真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
4.客户需要调用的是RealSubject中的request方法,现在使用ProxySubject来代理Realsubject类,同样达到了目的,同时还封装了其他方法(preRequest,afterRequest),可以处理一些其他问题。
5.另外,如果要按照上述方法使用代理模式,那么真实的角色必须是已经存在了的,并将其作为代理对象的内部属性。但是实际使用的时候i,一个真实角色必须对应一个代理角色,如果大量使用会导致类得极具膨胀;此外如果事先并不知道真实角色,那么该如何使用代理?这个问题可以通过Java的动态代理类来解决。
/**
 * Proxy.java
 * proxy
 *
 * Function: TODO
 *
 *   ver     date      		author
 * ──────────────────────────────────
 *   		 2011-6-8 		Leon
 *
 * Copyright (c) 2011, TNT All Rights Reserved.
*/
 
package proxy;
/**
 * ClassName:Proxy
 * Function: TODO ADD FUNCTION
 * Reason:	 TODO ADD REASON
 *
 * @author   Leon
 * @version
 * @since    Ver 1.1
 * @Date	 2011-6-8
 */
 
abstract class Subject {
	public abstract void request() ;
}
 
class RealSubject extends Subject{
	@Override
	public void request() {
 
		// TODO Auto-generated method stub
		System.out.println("This is my real Request...");
 
	}
}
public class Proxy extends Subject {
 
	/** Proxy中会包含对RealSubject的引用**/
	private RealSubject realSubject ;
	@Override
	public void request() {
 
		// TODO Auto-generated method stub
		//调用真实之前(optional)
		this.preRequest();
		if(realSubject==null){
			//调用真实角色
			realSubject = new RealSubject();
		}
		realSubject.request();
		//调用真实之后(optional)
		this.afterRequest();
	}
	private void preRequest(){
		System.out.println("before real request.....");
	}
	private void afterRequest(){
		System.out.println("after the real  request......");
	}
	public static void main(String...  args){
		Subject subject =  new Proxy();
		subject.request();
	}
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值