(二十)設計模式-外觀模式

1、定義

(Facade)爲子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口是的這一子系統更加容易使用。

2、使用場景

散戶投資情況,爲了降低風險而購買了基金,專業的基金經理人會去購買一些股票,國債、房地產等。

3、代碼結構UML圖

在這裏插入圖片描述
客戶:客戶端類,調用。
基金:Facade外觀類,知道哪些子系統負責處理請求,將客戶的請求代理給適當的子系統對象。
股票一、二、三,國債一,房地產一:
SubSystem Classes子系統類集合,實現子系統的功能,處理Facade對象指派的任務,注意之類中沒有Facade的任何信息,即沒有對Facade對象的引用。

4、類的實現

(1)、Fund(基金類)
public class Fund {
    Stock1 gu1;
    Stock2 gu2;
    Stock3 gu3;
    NationalDebt1 nd1;
    Realty1 rt1;

    public Fund() {
        gu1 = new Stock1();
        gu2 = new Stock2();
        gu3 = new Stock3();
        nd1 = new NationalDebt1();
        rt1 = new Realty1();
    }

    public void bugFund() {
        gu1.buy();
        gu2.buy();
        gu3.buy();
        nd1.buy();
        rt1.buy();
    }

    public void sellFund() {
        gu1.sell();
        gu2.sell();
        gu3.sell();
        nd1.sell();
        rt1.sell();
    }
}
(2)、Stock1 、Stock2、Stock3、NationalDebt1、Realty1(股票類、國債類、房地產類)
public class Stock1 {
    public void sell() {
        System.out.println("股票1賣出");
    }

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

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

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

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

    public void buy() {
        System.out.println("房地產1買入");
    }
}

5、客戶端調用

public static void main(String[] args) {
        Fund jijin = new Fund();
        //基金購買
        jijin.bugFund();
        //基金贖回
        jijin.sellFund();
    }
輸出:

在這裏插入圖片描述

6、總結

設計初期階段,應該要有意識的將不同的兩個層分離,比如景點的三層架構就需要考慮在數據訪問層和業務邏輯層、業務邏輯層和表示層的層與層之間建立外觀Facade。
在開發階段,子系統往往因爲不斷的重構演化二變得越來越複雜。
增加外觀Facade可以提供一個簡單的接口,減少它們之間的依賴。
在維護一個遺留的大型系統時,可能這個系統以及非常難以維護和擴展了。
爲新系統開發一個外觀Facade類,來提供設計粗糙或高度複雜的遺留代碼的比較清晰簡單的接口,讓新系統與Facade對象交互,Facade與遺留代碼交互所有複雜的工作。


參考:《大話設計模式》

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