java设计模式:代理模式

静态代理模式

public interface Counter {

	public int add(int a, int b);
	
}

public class CounterImpl implements Counter{

	public int add(int a, int b) {
		System.out.println("计算的结果是:" + (a+b));
		return a + b;
	}

}

public class CounterProxy implements Counter {

	private Counter counterImpl;
	
	public CounterProxy(Counter counterImpl){
		this.counterImpl = counterImpl;
	}

	public int add(int a, int b) {
		System.out.println("方法执行前添加的方法");
		counterImpl.add(a, b);
		System.out.println("方法执行后添加的方法");
		return 0;
	}
	
}

public class CounterStaticProxyTest {

	public static void main(String[] args) {
		CounterImpl c = new CounterImpl();
		CounterProxy proxy = new CounterProxy(c);
		proxy.add(1, 2);
	}

}

动态代理模式

public class CounterInvocationHandler implements InvocationHandler {

	private Object object;
	
	public CounterInvocationHandler(Object object){
		this.object = object;
	}
	
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("方法执行前操作");
		Object result = method.invoke(object, args);
		System.out.println("方法执行后操作");
		return result;
	}
	
}

public class CounterDynaProxyTest {

	public static void main(String[] args) {
		Counter c = new CounterImpl();
		InvocationHandler handle = new CounterInvocationHandler(c);
		Counter cp = (Counter)Proxy.newProxyInstance(handle.getClass().getClassLoader(), c.getClass().getInterfaces(), handle);
		cp.add(2, 3);
	}

}

cglib动态代理模式

public class CounterCglibProxy implements MethodInterceptor{

	private Object object;
	
	public Object getInstance(Object object){
		this.object = object;
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(this.object.getClass());
		enhancer.setCallback(this);
		return enhancer.create();
	}
	
	public Object intercept(Object object, Method m, Object[] args, MethodProxy proxy) throws Throwable {
		System.out.println("开始前");
		proxy.invokeSuper(object, args);
		System.out.println("开始后");
		return null;
	}

}

public class CounterCglibProxyTest {

	public static void main(String[] args) {
		CounterImpl c = (CounterImpl)new CounterCglibProxy().getInstance(new CounterImpl());
		c.add(3, 4);
	}

}


你可能感兴趣的:(java设计模式:代理模式)