代理模式
概述
代码示例
public interface Subject {
	public  void sailBook();
}  public class RealSubject implements Subject {
	public void sailBook() {
		System.out.println("卖书");
	}
}  public class ProxySubject implements Subject{
	private RealSubject realSubject;
	public void sailBook() {
		dazhe();
		if(realSubject == null) {
			realSubject = new RealSubject();
		}
		realSubject.sailBook();
		give();
	}
	
	public void dazhe() {
		System.out.println("打折");
	}
	
	public void give() {
		System.out.println("赠送代金券");
	}
}  主函数
public class MainClass {
	public static void main(String[] args) {
		ProxySubject proxySubject = new ProxySubject();
		proxySubject.sailBook();
	}
}  动态代理
以上的部分我们需要手动代理,但是我们想要自动的让它进行代理
代码示例
public interface Subject {
	public  void sailBook();
}
  
public class RealSubject implements Subject {
	public void sailBook() {
		System.out.println("卖书");
	}
}  public class MyHandler implements InvocationHandler {
	private RealSubject realSubject;
	
	public void setRealSubject(RealSubject realSubject) {
		this.realSubject = realSubject;
	}
	public Object invoke(Object proxy, Method method, Object[] args){
		Object result = null;
		dazhe();
		try {
			result = method.invoke(realSubject, args);
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		give();
		return result;
	}
	
	public void dazhe() {
		System.out.println("打折");
	}
	
	public void give() {
		System.out.println("赠送代金券");
	}
}  主函数
public class MainClass {
	public static void main(String[] args) {
		RealSubject realSubject = new RealSubject();
		MyHandler myHandler = new MyHandler();
		myHandler.setRealSubject(realSubject);
		
		Subject proxySubject = (Subject)Proxy.newProxyInstance(RealSubject.class.getClassLoader(), realSubject.getClass().getInterfaces(), myHandler);
		proxySubject.sailBook();
	}
}  

京公网安备 11010502036488号