基本觀念 - 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");
    }
}

動態代理

代理模式分兩種:靜態代理、動態代理,上例是屬於靜態代理。
應該可以發現,如果有非常多的功能需要代理,那將會重複做很多事。
請看動態代理一文。

參考

results matching ""

    No results matching ""