`

代理模式(静态)

阅读更多
package com.jelly.proxy;
/**
 * 代理模式接口
 * @author Jelly QQ136179492
 *
 */
public abstract class Subject {
	public abstract void request();
}

package com.jelly.proxy;
/**
 * 代理模式,真实类 
 * @author Jelly QQ136179492
 *
 */
public class RealSubject extends Subject {

	public void request() {
		System.out.println("Form Real Subject");
	}

}

package com.jelly.proxy;
/**
 * 代理类
 * @author Jelly
 *
 */
public class ProxySubject extends Subject {
	
	private RealSubject realSubject; //代理角色内部引用了真实角色
	
	public void request() {
		preRequest();
		if(realSubject ==null)
			realSubject = new RealSubject();
		realSubject.request(); //真实角色所完成的事情 
		postRequest();
	}
	private void preRequest(){
		System.out.println("pre request");
	}
	private void postRequest(){
		System.out.println("post request");
	}
}

package com.jelly.proxy;

/**
 * 代理模式测试
 * @author Jelly QQ136179492
 *
 */
public class Test {

	public static void main(String[] args) {
		Subject subject = new ProxySubject();
		subject.request();
	}

}

如果按照上述的方法使用代理模式,那么真实角色必须事先已经存在,并将其作为代理对象的内部属性。但在实际使用时一个真实角色必须对应一个代理角色,如果大量使用会导致类的隐剧膨胀。此外如果实现并不知道真实角色,该如何使用代理呢这个问题可以通过JAVA的动态代理类来解决
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics