設計模式之外觀模式

Ericyshi發表於2018-07-20

很多人都會炒股,但散戶們就像待割的韭菜,割了又長,長了又被割,很多人樂此不疲,在股市虧了不少錢,繳了不少智商費。

股民炒股票程式碼:

public class Stock1 {
    public void sell(){
        System.out.println("股票1賣出");
    }
    public void buy(){
        System.out.println("股票1買入");
    }
}

class Stock2 {
    public void sell(){
        System.out.println("股票2賣出");
    }
    public void buy(){
        System.out.println("股票2買入");
    }
}

class NationalDebt1 {
    public void sell(){
        System.out.println("國債1賣出");
    }
    public void buy(){
        System.out.println("國債1買入");
    }
}

class Realty1 {
    public void sell(){
        System.out.println("房產1賣出");
    }
    public void buy(){
        System.out.println("房產1買入");
    }
}
public class Test {

    public static void main(String[] args) {
        //test 1
        Stock1 stock1 = new Stock1();
        Stock2 stock2 = new Stock2();
        NationalDebt1 nd1 = new NationalDebt1();
        Realty1 realty1 = new Realty1();
        stock1.buy();
        stock2.buy();
        nd1.buy();
        realty1.buy();
        
        stock1.sell();
        stock2.sell();
        nd1.sell();
        realty1.sell();

    }

}

功能是實現了,但客戶端測試程式碼太難看了,每一項資產的買入或賣出都是直接羅列出來的,沒有體現封裝。再者,股民自己選擇買入或賣出股票也不專業,同時也需要關注大量股票資訊,時間精力也不夠。這時我們可以讓基金公司來幫我們打理,這樣更專業。

public class Fund {
    Stock1 stock1;
    Stock2 stock2;
    NationalDebt1 nd1;
    Realty1 realty1;
    public Fund(){
        stock1 = new Stock1();
        stock2 = new Stock2();
        nd1 = new NationalDebt1();
        realty1 = new Realty1();
    }
    public void buyFund(){
        stock1.buy();
        stock2.buy();
        nd1.buy();
        realty1.buy();
    }
    public void sellFund(){
        stock1.sell();
        stock2.sell();
        nd1.sell();
        realty1.sell();
    }
}
public class Test {

    public static void main(String[] args) {
        System.out.println("----------------------------");
        Fund fund = new Fund();
        fund.buyFund();
        fund.sellFund();
    }

}

完美體現了依賴倒轉原則和迪米特法則。

外觀模式:為子系統的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使子系統更加容易使用。

何時使用外觀模式:

首先,在設計初期階段,應該要有意識地將不同的兩個層分離,層與層之間建立外觀facade。

其次,在開發階段,子系統往往因為不斷的重構演化而變得越來越複雜,增加外觀facade可以提供一個簡單的介面,減少他們之間的依賴。

第三,在維護遺留的大型系統時,可以為新系統開發一個facade類,來提供設計粗糙或高度複雜的遺留程式碼的比較清晰簡單的介面,讓新系統與facade互動。

 

相關文章