解决这个问题:在多个模块要插入一段功能,比方,在不同业务处理模块中,都须要检查用户是否登录,假设不使用代理的话,每添加一个模块,就须要添加非常多代码。
比方,除了推断是否登录,假设还须要添加一个记录日志的功能,那么每一个模块都须要又一次添加一个函数。
以下我们利用静态代理的功能来解决这个需求。
代码结构
功能函数接口
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();
} }
输出结果
我们能够看到,假设我们须要在非常多个添加共同的函数的时候,仅仅须要在代理类中添加就可以。并且能够看出,代理类中仅仅有自己的业务逻辑,没有其它的不论什么服务,服务都定义在被代理类本身。