代理模式示例

功能可實現日誌操作,監聽操作......

1.接口類

package cn.jzy.proxy;

public interface IHello {
	public void sayMorning(String msg);
	public String sayAfernoon(String msg);
}

2.實現類

package cn.jzy.proxy;

public class HelloImpl implements IHello{

	@Override
	public void sayMorning(String msg) {
		System.out.println("早上好:"+msg);
	}

	@Override
	public String sayAfernoon(String msg) {
		//System.out.println("晚上好:"+msg);
		return "晚上好"+msg;
	}
	
}

3.代理者

package cn.jzy.proxy;

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

public class ProxyImpl implements InvocationHandler {
	Object obj;

	public void setObj(Object obj) {
		this.obj = obj;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object returnObj=null;
		if ("sayMorning".equals(method.getName())) {
			System.out.println("發送消失開始: " + args[0].toString());

			returnObj = method.invoke(obj, args);

			System.out.println("發送消失結束:");
		} else if ("sayAfernoon".equals(method.getName())) {
			System.out.println("發送消失開始: " + args[0].toString());

			returnObj = "沒空理你!";

			
		}

		return returnObj;
	}

}

4.運行類

package cn.jzy.proxy;

import java.lang.reflect.Proxy;

public class TestPoxy {
	public static void main(String[] args){
		HelloImpl h=new HelloImpl();
		ProxyImpl proxy=new ProxyImpl();
		proxy.setObj(h);
		IHello fakeH=(IHello)Proxy.newProxyInstance(h.getClass().getClassLoader(), new Class[] {IHello.class}, proxy);
		fakeH.sayMorning("張三");
		System.out.println(fakeH.sayAfernoon("李四"));
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章