Java設計模式(七):代理模式Proxy(靜態代理模式+動態代理模式)

  • 靜態代理


package com.iter.devbox.staticProxy;

public interface Star {
	
	public void sing();

}

package com.iter.devbox.staticProxy;

public class RealStar implements Star {

	@Override
	public void sing() {
		System.out.println(this.getClass().getName() + ".sing()");
	}

	
}

package com.iter.devbox.staticProxy;

public class StarHandler implements Star {

	private Star realStar;
	
	public StarHandler(Star realStar) {
		super();
		this.realStar = realStar;
	}

	@Override
	public void sing() {
		System.out.println(this.getClass().getName() + ".sing() 執行之前");
		realStar.sing();
		System.out.println(this.getClass().getName() + ".sing() 執行之後");
	}

}

package com.iter.devbox.staticProxy;

public class Client {

	public static void main(String[] args) {
		new StarHandler(new RealStar()).sing();
	}

}


  • 動態代理

package com.iter.devbox.dynamicProxy;

public interface Star {
	
	public void sing();

}
package com.iter.devbox.staticProxy;

public class RealStar implements Star {

	@Override
	public void sing() {
		System.out.println(this.getClass().getName() + ".sing()");
	}

	
}

package com.iter.devbox.dynamicProxy;

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

public class StarHandler implements InvocationHandler {
	
	Object star;
	
	public StarHandler(Object star) {
		super();
		this.star = star;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("代理方法執行前");
		Object obj = method.invoke(star, args);
		System.out.println("代理方法執行後");
		return obj;
	}

}

package com.iter.devbox.dynamicProxy;

import java.lang.reflect.Proxy;

public class Client {

	public static void main(String[] args) {
		Star realStar = new RealStar();
		// 調用處理器
		StarHandler handler = new StarHandler(realStar);
		// 利用JDK動態代理生成代理類接口
		Star star = (Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), 
				new Class[]{Star.class}, handler);
		star.sing();
	}

}



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