设计模式之代理模式

由于我刚学JAVA3到4个月,所以JAVA语言的很多知识都理解的不透彻,但是我勉励自己有空多来这里做做学习笔记,同时希望高手指正 总之我个人觉得代理模式思想在Struts2.0中的拦截器和Spring的AOP中都被升华了 附件中是我QQ截的UML类图

//代理接口

package proxy;

public interface IMyBussiness {

public abstract void add();

public abstract int delete();

public abstract void update();

}

//代理类
package proxy;

public class MyBussiness implements IMyBussiness

/*
* (non-Javadoc)
*
* @see proxy.IMyBussiness#add()
*/
public void add() {
//业务处理代码
System.out.println("业务处理,添加信息");
}

//这里返回类型int 为测试用
public int delete() {
System.out.println("业务处理,删除信息");
return 1;
}

public void update() {

System.out.println("业务处理,更新信息");
}
}



//自定义代理实例的调用处理程序类需实现java.lang.reflect.InvocationHandler接口

package proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

import org.apache.log4j.Logger;

public class LogInvocationHandler implements InvocationHandler {
Logger log = Logger.getLogger(this.getClass());
private IMyBussiness bussiness;

public LogInvocationHandler(IMyBussiness bussiness) {
this.bussiness = bussiness;
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
String m = method.getName();
if (m != null) {
if (m.startsWith("add")) {
log.info("添加操作");
} else if (m.startsWith("delete")) {
log.info("删除操作");
} else if (m.startsWith("update")) {
log.info("更新操作");
}
}
Object obj = method.invoke(bussiness, args);
// 如果底层方法返回类型为 void,则该调用返回 null System.out.println("---------" + obj);

return obj;
}

}


//代理测试类


package proxy;

import java.lang.reflect.Proxy;

public class Test {

public static void main(String[] args) {
MyBussiness bussiness = new MyBussiness();
LogInvocationHandler handler = new LogInvocationHandler(bussiness);
IMyBussiness ibussiness = (IMyBussiness) Proxy.newProxyInstance(
bussiness.getClass().getClassLoader(),bussiness.getClass().getInterfaces(), handler);
ibussiness.delete();

}

}

//输出结果


INFO-删除操作
业务处理,删除信息
---------1


//我觉得像我们这样的初学者最好用Debug模式来看下代码的执行流程,另外多看看API文档帮助.

你可能感兴趣的:(设计模式,spring,log4j,qq,UML)