代理模式(动态代理)
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/Dog.java
package nuc.sw.dynamic.proxy;
public interface Dog {
public void info();
public void run();
public void cry();
}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/DogImpl.java
package nuc.sw.dynamic.proxy;
public class DogImpl implements Dog {
@Override
public void info() {
System.out.println("一只薛皮皮");
}
@Override
public void run() {
System.out.println("薛皮皮骑着Clearlove7的猪跑了");
}
@Override
public void cry() {
System.out.println("薛皮皮成为嚎哭深渊领主");
}
}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/MyInterceptor.java
package nuc.sw.dynamic.proxy;
public class MyInterceptor {
public void method1() {
System.out.println("模拟Struts框架中访问action之前拦截器执行的代码");
}
public void method2() {
System.out.println("模拟Struts框架中访问action之后拦截器执行的代码");
}
}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/MyProxyFactory.java
package nuc.sw.dynamic.proxy;
import java.lang.reflect.Proxy;
public class MyProxyFactory {
public static Object getProxy(Object object,String methodName) {
ProxyHandler handler=new ProxyHandler(object, methodName);
return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), handler);
}
}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/ProxyHandler.java
package nuc.sw.dynamic.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ProxyHandler implements InvocationHandler {
private Object target;
private String methodName;
private MyInterceptor mi=new MyInterceptor();
public ProxyHandler(Object target,String methodName) {
this.target=target;
this.methodName=methodName;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result=null;
if(method.getName().equals(methodName)) {
mi.method1();
result=method.invoke(target, args);
mi.method2();
}else {
result=method.invoke(target, args);
}
return result;
}
}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/TestDynamicProxy.java
package nuc.sw.dynamic.proxy;
import nuc.sw.proxy.*;
public class TestDynamicProxy {
public static void main(String[] args) {
Dog dog=new DogImpl();
Dog dogProxy=(Dog) MyProxyFactory.getProxy(dog, "info");
dogProxy.info();
dogProxy.run();
dogProxy.cry();
BookAbstractSubject publisher=new Publisher();
BookAbstractSubject publisherProxy=(BookAbstractSubject)MyProxyFactory.getProxy(publisher, "saleBook");
publisherProxy.saleBook();
}
}
- /20171030_chr_proxy/src/nuc/sw/proxy/BookAbstractSubject.java
package nuc.sw.proxy;
public interface BookAbstractSubject {
public void saleBook();
}
- /20171030_chr_proxy/src/nuc/sw/proxy/Publisher.java
package nuc.sw.proxy;
public class Publisher implements BookAbstractSubject{
public void saleBook() {
System.out.println("真实主题角色出版社卖书");
}
public void makeBook() {
System.out.println("真实主题角色出版社造书");
}
}
- /20171030_chr_proxy/src/nuc/sw/proxy/ShoppingOnline.java
package nuc.sw.proxy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ShoppingOnline implements BookAbstractSubject{
private Publisher publisher=new Publisher();
public void presaleBook() {
System.out.println("代理主题角色网上商店买书前宣传");
}
public void postsaleBook() {
System.out.println("代理主题角色网上商店卖书后售后服务");
}
public void saleBook() {
this.invoke();
}
public void invoke() {
Method[] methods=publisher.getClass().getMethods();
for(int i=0;i<methods.length;i++) {
try {
if(methods[i].getName().equals("saleBook")) {
this.presaleBook();
methods[i].invoke(publisher);
this.postsaleBook();
}else {
methods[i].invoke(publisher);
}
}
catch (IllegalAccessException e) {
}
catch (IllegalArgumentException e) {
}
catch (InvocationTargetException e) {
}
}
}
}
- /20171030_chr_proxy/src/nuc/sw/proxy/TextProxy.java
package nuc.sw.proxy;
public class TextProxy {
public static void main(String[] args) {
ShoppingOnline so=new ShoppingOnline();
so.invoke();
}
}