基本觀念 - Proxy Pattern
代理模式
代理模式簡單說就是,A/B兩人實作同一介面,A代理B,則B把自己交給A。
程式如下:
// Subject
public interface IHello {
public void hello(String name);
}
// RealSubject
public class HelloSpeaker implements IHello {
public void hello(String name) {
System.out.println("Hello, " + name);
}
}
// Proxy
public class HelloProxy implements IHello {
private IHello helloSubject;
public HelloProxy(IHello realSubject) {
this.helloSubject = realSubject;
}
public void hello(String name) {
log("hello method starts ...");
helloSubject.hello(name); // 執行商務邏輯
log("hello method ends.");
}
private void log(String msg) {
logger.log(Level.INFO, msg);
}
}
我們使用HelloProxy這個代理,就可以做到log
與執行hello
分離。
這樣做的優點是:商業邏輯和日誌分離,好維護
使用上也很直觀
public class ProxyDemo {
public static void main(String[] args) {
IHello proxy = new HelloProxy(new HelloSpeaker());
proxy.hello("Justin");
}
}
動態代理
代理模式分兩種:靜態代理、動態代理,上例是屬於靜態代理。
應該可以發現,如果有非常多的功能需要代理,那將會重複做很多事。
請看動態代理一文。