【原創·教程·連載】《Android之大話設計模式》–設計模式之結構型模式 第八章:面板模式 MM也迷戀炒股?

來源:互聯網
上載者:User
<大話設計模式>本教程說明及著作權聲明

國士工作室是一支專註於Android平台企業級應用開發的技術團隊,致力於做中國最棒的Android應用程式開發機構,提供最棒的Android企業級應用開發培訓服務。

企業培訓和開發合作官方連絡方式:

     電話:18610086859

     Email:hiheartfirst@gmail.com

     QQ:1740415547

國士工作室 有你更美好!

l 該文檔參考和使用了網路上的免費開放的圖片和內容,並以免費開放的方式發布,希望為移動互連網和智能手機時代貢獻綿薄之力!可以隨意轉載,但不得使用該文檔謀利。

l 如果對該文檔有任何疑問或者建議,請進入官方部落格

   http://www.cnblogs.com/guoshiandroid/留言或者直接與國士工作室聯絡(後附連絡方式),我們會謹慎參考您的建議並根據需要對本文檔進行修改,以造福更多開發人員!

l 《大話設計模式》的最新及完整內容會在國士工作室官方部落格定期更新,請訪問國士工作室部落格

http://www.cnblogs.com/guoshiandroid/擷取更多更新內容。

面板模式 MM也迷戀炒股? 

面板模式應用情境舉例 

一次和MM在QQ上聊天,MM說自己表哥在炒股掙了很多錢,到表哥那裡總是聽表哥和客人說什麼期貨、股票、國債等專業術語,聽的都一頭霧水,而且據說還有一個神奇的基金,你只需要把資金交給相關的機構,這些機構就可以直接幫你用錢掙錢,你自己根本不用關心具體的過程!MM就在QQ中問GG這具體是什麼意思,當MM在QQ中描述這些資訊的時候,GG就在一邊看資訊一邊在網上查這些名詞的相關解釋,於是就直接拷貝到QQ中發了過去,如下:

基金:花錢僱人幫你炒股,虧賺都是你的,人家收手續約和資金保管費。

期貨:就是花錢買一些你拿不到實際貨物的東西。可以買空賣空,繳納保證金可以使資金放大交易,風險和收益也隨之放大。

股票:買了某個公司的股票你就是這個公司的股東,如果感覺股票漲了你賺錢之後可以隨時賣掉。虧了的感覺只有你自己知道了

國債:就是國家找你借錢,然後給你利息,但是必須在規定的期限到期之後才給你兌現。

面板模式解釋: 

       面板模式(Façade Pattern)是比較常用的一種軟體設計模式,屬於結構型模式的一種。它為一組具有類似功能的類群,比如類庫,子系統等等提供一個統一的高層介面。這個高層介面以一種簡單一致的介面展現給使用者,從而使得子系統、類群等更容易使用。

英文定義為:Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.

面板模式的UML圖: 

       建造者模式涉及以下的角色:

       外觀(Facade)角色: 為調用方定義簡單的調用介面。

       用戶端(Clients)角色:通過Facade介面調用提供某功能的內部類群,讀寫子系統各個介面的資料資源。

       類群(Packages)角色:功能提供者。指提供功能的類群(模組或子系統)。

面板模式的UML圖如下所示:

更具體的UML圖如下所示:

面板模式深入分析

       在真實的應用系統中,一個子系統可能由很多類組成。子系統的用戶端為了它們的需要,需要和子系統中的一些類進行互動。用戶端和子系統的類進行直接的互動會導致用戶端對象和子系統之間高度耦合。任何的類似於對子系統中類的介面的修改,會對依賴於它的所有的客戶類造成影響。面板模式(Facade pattern)為子系統提供了一個更高層次、更簡單的介面,從而降低了子系統的複雜度和依賴。這使得子系統更便於使用和管理。

       外觀是一個能為子系統和用戶端提供簡單介面的類。當正確的套用面板,客戶不再直接和子系統中的類互動,而是與外觀互動。外觀承擔與子系統中類互動的責任。實際上,外觀是子系統與客戶的介面,這樣面板模式降低了子系統和客戶的耦合度。這樣,就可以使得當子系統改變的時候,用戶端可以保持不變性。

       儘管用戶端使用由外觀提供的簡單介面,但是當需要的時候,用戶端還是可以視外觀不存在,直接存取子系統中的低層次的介面。這種情況下,它們之間的依賴/耦合度和原來一樣。

面板模式使用情境分析及代碼實現:

       在上面的使用情境中,期貨、股票、國債分別屬於單一的不同的投資類型,而基金可以把這些類型綜合起來,也就是說,基金相當於期貨、股票、國債的外觀,福士只需要通過基金這個介面進行理財投資即可。

       UML模型圖如下所示:

 

建立股票類:

package com.diermeng.designPattern.Facade.impl;

/*

 * 股票類

 */

public class Stock {

    /*

     * 購買股票

     */

    public void buy() {

       System.out.println("購買股票");

    }

}

 

建立國債類:

package com.diermeng.designPattern.Facade.impl;

/*

 * 國債類

 */

public class NationalDebt {

    /*

     * 購買國債

     */

    public void buy() {

       System.out.println("購買國債");

    }

}

建立期貨類:

package com.diermeng.designPattern.Facade.impl;

/*

 * 期貨類

 */

public class Futures {

 

    public void buy() {

       System.out.println("購買期貨");

    }

}

 

建立基金類:

package com.diermeng.designPattern.Facade.impl;

 

 

/*

 * 基金類

 */

public class Fund {

    //聲明股票

    private Stock stock;

    //聲明國債

    private NationalDebt guozai;

    //聲明期貨

    private Futures futures;

 

    //構造方法 執行個體化聲明的變數

    public Fund() {

       this.guozai = new NationalDebt();

       this.stock = new Stock();

       this.futures = new Futures();

    }

 

    //A種基金類型

    public void fundA() {

       this.guozai.buy();

       this.futures.buy();

    }

    //B種基金類型

    public void fundB() {

       this.guozai.buy();

       this.stock.buy();

    }

    //C種基金類型

    public void fundC() {

       this.futures.buy();

       this.stock.buy();

    }

 

    //D中基金類型

    public void fundD() {

       this.guozai.buy();

       this.stock.buy();

       this.futures.buy();

    }

}

最後我們建立測試用戶端:

package com.diermeng.designPattern.Facade.client;

 

import com.diermeng.designPattern.Facade.impl.Fund;

 

/*

 * 測試用戶端

 */

public class FacadeTest {

    public static void main(String[] args) {

       //建立基金類

       Fund jijin = new Fund();

 

       //調用相應的方法

       System.out.println("***************************");

       jijin.fundA();

       System.out.println("***************************");

       jijin.fundB();

       System.out.println("***************************");

       jijin.fundC();

       System.out.println("***************************");

       jijin.fundD();

       System.out.println("***************************");

    }

}

輸出的結果如下:

***************************

購買國債

購買期貨

***************************

購買國債

購買股票

***************************

購買期貨

購買股票

***************************

購買國債

購買股票

購買期貨

***************************

 

面板模式的優缺點分析:

       優點:

面板模式通過提供一個統一的對外介面,一方面可以避免外部系統和子系統之間的直接聯絡,從而降低系統間的依賴程度;另外一方面,如何外部系統想和子系統進行直接的互動,也可以繞過面板模式,這使得外部系統對子系統的使用非常的靈活。           

缺點:

面板模式對外部系統提供的介面是有限的,從這個角度上講,是限制了外部系統對子系統調用的靈活性。

面板模式的實際應用簡介:

一般而言,面板模式使用於以下場合:

第一:為一個複雜的子系統提供一個簡單的介面。子系統往往因為不斷的演化而變的越來越複雜,使用面板模式可以保持外部系統對子系統調用的簡潔性,而那些需要細節調用的使用者卻可以越過面板模式直接對子系統進行調用。

第二:引進面板模式可以將一個子系統和使用它的用戶端以及其它的子系統分離開來,這就提高了子系統的獨立性和可移植性。

第三:在構建一個層次化結構的時候,可以使用面板模式定義每一個層次對外互動的介面。此時,層與層之間只需要通過外觀進行通訊,從而簡化層與層之間的依賴關係。

       面板模式是一種得到廣泛應用的模式,例如我們熟知的MVC模式就採用了面板模式。在MVC,在MVC架構模式中,每一層並不需要知道其它層次的細節,只是通過層與層之間的介面調用即可。這大大的方便了開發。

溫馨提示:

       一般而言,面板模式是在複雜系統中擁有多個子系統的情況係為子系統提供方便一致的對外介面,但是這並不妨礙外部系統和子系統的直接互動,因為外部系統可以穿越外觀而直接與子系統互動。

       對於股票、期貨、基金而言,基金就相當於它們的外觀,而且還可以組合出多個不同的外觀來攻股民選購。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.