1. 程式人生 > 其它 >如何在程式碼層面提供CPU分支預測效率

如何在程式碼層面提供CPU分支預測效率

       代理模式是一種注重過程的一種模式,在我們做某一具體事情之前或之後做一些輔助性的工作; 好處是將輔助工作從主要工作中抽離出來,但是又能協同工作, 我們只關心主要業務,對於不關心的事情交給代理來做,實現代理需要兩個物件:被代理者,執行者

JDK中提供的動態代理(只能代理介面): 

public interface IBuy {
	void pay();
}

public class Buy implements IBuy{

	@Override
    public void pay() {
	    System.out.println("訂單支付完成!");
    }

public class PayProxy implements InvocationHandler {
	private Object obj;
	public PayProxy(Object target) {
	   this.obj = target;
    }

	public Object newInstance() {
		Class<? extends Object> cls = obj.getClass();
		return Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), this);
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		Object res = method.invoke(obj, args);
		System.out.println("----------");
		sendMsg();
		return res;
	}
	
	private void sendMsg(){
		System.out.println("買家已付款,請儘快發貨!");
	}
}

--------------
IBuy buy = (IBuy)new PayProxy(new Buy()).newInstance();
		buy.pay();


console:
訂單支付完成!
----------
買家已付款,請儘快發貨!

CGLIB方式(代理具體類):

public class Buy{
    public void pay() {
	    System.out.println("訂單支付完成!");
    }

}

public class CglibPayProxy implements MethodInterceptor {
	private static final CglibPayProxy PROXY = new CglibPayProxy();
	private CglibPayProxy() {
	}

	public static CglibPayProxy getInstance() {
		return PROXY;
	}

	@SuppressWarnings("unchecked")
	public <T> T newProxy(Class<T> clazz) {
		Enhancer enhancer = new Enhancer();
		 enhancer.setSuperclass(clazz);
		 enhancer.setCallback(this);
		 return (T) enhancer.create();
	}

	@Override
	public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3)
	        throws Throwable {
		Object res = arg3.invokeSuper(arg0, arg2);
		System.out.println("------------");
		sendMsg();
		return res;
	}

	private void sendMsg() {
		System.out.println("買家已付款,請儘快發貨!");
	}


Buy buy = CglibPayProxy.getInstance().newProxy(Buy.class);
		buy.pay();