深入淺出設計模式之狀態模式、代理模式

狀態模式

當你開發的項目通常是由一個一個的狀態以及狀態之間的轉換構成時,可以考慮使用狀態模式。先看一下狀態模式的類圖,和適配器模式特別像
我們來拿深入淺出上面的糖果機來做例子,代碼有點多,就不寫了。可以自己下這本書來看。感覺還是挺好玩的。


代理模式

所謂的代理模式,就是用這個代理去代表某個對象,從而實現某些功能。比如這個代理是個監視器,負責監視代理對象的一些狀態。或者你需要用這個代理獲得遠程對象的數據等等。
java中最典型的的代理模式就是RMI遠程通信。RMI在客戶端和服務器端都持有相同的一組接口,這組接口的實現在客戶端,和服務器端有點區別。
我們來看看Java的RMI是如何實現的:


先不寫了,代理模式也比較簡單,RMI比較難

靜態代理模式其實很常見,比如買火車票這件小事:黃牛相當於是火車站的代理,我們可以通過黃牛買票,但只能去火車站進行改簽和退票。在代碼實現中相當於爲一個委託對象realSubject提供一個代理對象proxy,通過proxy可以調用realSubject的部分功能,並添加一些額外的業務處理,同時可以屏蔽realSubject中未開放的接口。


 

1、RealSubject 是委託類,Proxy 是代理類;
2、Subject 是委託類和代理類的接口;
3、request() 是委託類和代理類的共同方法;

具體代碼實現如下:

interface Subject {
    void request();
}

class RealSubject implements Subject {
    public void request(){
        System.out.println("RealSubject");
    }
}

class Proxy implements Subject {
    private Subject subject;

    public Proxy(Subject subject){
        this.subject = subject;
    }
    public void request(){
        System.out.println("begin");
        subject.request();
        System.out.println("end");
    }
}

public class ProxyTest {
    public static void main(String args[]) {
        RealSubject subject = new RealSubject();
        Proxy p = new Proxy(subject);
        p.request();
    }
}
動態代理前面的文章寫了,記住就好了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章