java的静态代理

解决这个问题:在多个模块要插入一段功能,比方,在不同业务处理模块中,都须要检查用户是否登录,假设不使用代理的话,每添加一个模块,就须要添加非常多代码。

比方,除了推断是否登录,假设还须要添加一个记录日志的功能,那么每一个模块都须要又一次添加一个函数。

以下我们利用静态代理的功能来解决这个需求。

代码结构



功能函数接口

package itbuluoge.proxy;

public interface ICompent {

	public void bussiness1();
	public void bussiness2();
	public void bussiness3();
}

代理类

package itbuluoge.proxy;

public class ProxyCompent implements ICompent{
	
	private ICompent ic;
	
	public ProxyCompent(ICompent ic)
	{
		this.ic=ic;
	}

	public void validateUser()
	{
		System.out.println("验证用户...");
	}
	public void bussiness1() {
		// TODO Auto-generated method stub
		validateUser();
		ic.bussiness1();
	}

	public void bussiness2() {
		// TODO Auto-generated method stub
		validateUser();
		ic.bussiness2();
	}

	public void bussiness3() {
		// TODO Auto-generated method stub
		validateUser();
		ic.bussiness3();
	}

	
}

被代理类

package itbuluoge.proxy;

public class Compent implements ICompent{

	public void bussiness1() {
		// TODO Auto-generated method stub
		System.out.println("业务1");
	}

	public void bussiness2() {
		// TODO Auto-generated method stub
		System.out.println("业务2");
	}

	public void bussiness3() {
		// TODO Auto-generated method stub
		System.out.println("业务3");
	}
	

}

測试类

package itbuluoge.proxy;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ProxyCompent myProxy=new ProxyCompent(new Compent());
		myProxy.bussiness1();
		myProxy.bussiness2();
		myProxy.bussiness3();
	}

}

输出结果



我们能够看到,假设我们须要在非常多个添加共同的函数的时候,仅仅须要在代理类中添加就可以。并且能够看出,代理类中仅仅有自己的业务逻辑,没有其它的不论什么服务,服务都定义在被代理类本身。



posted @ 2014-11-07 11:45  lcchuguo  阅读(201)  评论(0编辑  收藏  举报