《Android源碼設計模式》讀書筆記 (22) 第22章 外觀模式

前言

  • 外觀模式是封裝API的常用手段.通過一個外觀類使得整個系統的接口只有一個統一的高層接口,這樣能夠降低用戶的使用成本,也對用戶屏蔽了很多實現細節.

定義

  • 定義:要求一個子系統的外部與內部的通信必須通過一個統一的對象進行.門面模式(Facade模式)提供一個高層次的接口,使得子系統更容易使用
  • 使用場景:
    1.爲一個複雜的子系統提供一個簡單統一的接口,對外隱藏子系統的具體實現,隔離變化.
    2.當你需要構建一個層次接口的子系統時,使用Facade模式定義子系統中每層的入口點.
  • 優點:
    1.對客戶程序隱藏子系統細節,因而減少了客戶對於子系統的耦合,能夠擁抱變化
    2.外觀類對子系統的接口封裝,使得系統更易於使用.
  • 缺點:
    1.外觀類接口膨脹,在一定程度上增加了用戶的使用成本
    2.外觀類沒有遵循開閉原則,當業務出現變更時,可能需要直接修改外觀類.

UML類圖

這裏寫圖片描述

  • Facade:系統對外的統一接口,系統內部系統得工作.
  • SystemA,SystemB,SystemC:子系統接口.
    一個統一的接口對外提供服務,使得外部程序只通過一個類就可以實現系統內部的多種功能.

實現案例

  • 這裏通過一個模擬手機撥號等業務的案例來表現外觀模式.
    1.首先將子類的具體實現寫在內部,主要由接口和實現內組成.
/**
 * 打電話接口
 * Created by max on 2016/4/12.
 */
public interface Phone {
    //撥電話
    public void dail();
    //掛斷
    public void hangup();
}
/**
 * 撥打電話具體的實現類
 * Created by max on 2016/4/12.
 */
public class PhoneImpl implements Phone{
    @Override
    public void dail() {
        //寫具體業務
    }

    @Override
    public void hangup() {
        //寫具體業務
    }
}

2.將子類具體的實現,封裝在一個統一的對外高層次接口裏面,其實也就是用戶能調用的類,用戶只用調取這個類的方法,就可以實現相關功能了.

/**
 * 手機的相關功能
 * 使用對不同子類引用的相關方法,實現具體的不同業務功能
 * Created by max on 2016/4/12.
 */
public class MobilePhone {
    private Phone mPhone = new PhoneImpl();
    private Cemera mCemera = new SamsungCamera();

    public void dail(){
        mPhone.dail();
    }

    public void videoChat(){
        mCemera.open();
        mPhone.dail();
    }
}

總結

發佈了82 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章