天天看點

《設計模式修煉真經》12 — 外觀模式

1、定義

外觀模式的定義:要求一個子系統的外部與其内部的通信必須通過一個統一的對象進行;外觀模式提供一個高層次的接口,使得子系統更易于使用;

外觀(Facade)模式又叫作門面模式,是我們平時最常用的設計模式之一;

2、類圖

外觀模式的通用類圖很簡單,如下:

《設計模式修煉真經》12 — 外觀模式

外觀模式主要包括以下兩種角色:

  • 外觀(Facade)角色:使用者可以調用這個角色的方法,該角色知曉子系統的所有功能和責任。一般情況下,該角色會将從用戶端發來的請求委派到相應的子系統去,也就說該角色沒有實際的業務邏輯,隻是一個委托類;
  • 子系統角色(SubSystem):實作系統的部分功能,客戶可以通過外觀角色通路它;

3、代碼實作

外觀模式 的Java代碼實作如下:

//外觀角色
public class Facade {
  //被委托的對象
  private ClassA a = new ClassA();
  private ClassB b = new ClassB();
  private ClassC c = new ClassC();
  //提供給外部通路的方法
  public void methodA(){
    this.a.doSomethingA();
  }
  public void methodB(){
    this.b.doSomethingB();
  }
  public void methodC(){
    this.c.doSomethingC();
  }
}

//子系統
public class ClassA {
  public void doSomethingA(){
    //業務邏輯
  }
}
public class ClassB {
  public void doSomethingB(){
    //業務邏輯
  }
}
public class ClassC {
  public void doSomethingC(){
  //業務邏輯
  }
}      

4、特點

優點:

1、減少系統的互相依賴

降低了子系統與用戶端之間的耦合度,使得子系統的變化不會影響調用它的客戶類,同時所有的依賴都是對外觀對象的依賴,與子系統無關;

2、提高了靈活性

依賴減少了,靈活性自然提高了,不管子系統内部如何變化,隻要不影響到外觀對象就行;

3、提高安全性

想讓你通路子系統的哪些業務就開通哪些邏輯,不在外觀對象上開通的方法就無法通路;

4、是“迪米特法則”的典型應用

缺點:

增加新的子系統可能需要修改外觀類的代碼,違背了“開閉原則”,同時這個外觀對象是重中之重,随意修改會帶來較大風險;

5、适用場景

外觀模式通常适用于以下場景:

1、分層結構系統使用外觀模式定義子系統中每層的入口點可以簡化子系統之間的依賴關系;

2、當子系統很多時,外觀模式可以為系統設計一個統一簡單的接口供外界通路;

3、當用戶端與多個子系統之間存在很大的聯系時,引入外觀模式可将它們分離,進而提高子系統的獨立性和可移植性;

我的視訊課

下面是我錄制的一些視訊課,歡迎大家圍觀~

​​​《設計模式修煉真經》​​​ 設計模式是一套被反複使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結,代表了最佳的實踐,通常被有經驗的面向對象的軟體開發人員所采用。

本套課程深入介紹了經典的23種設計模式,并加入了自己的感悟,希望大家能夠徹底掌握設計模式,寫出最好的代碼,達到無招勝有招的境界,最終超越這23種設計模式。

​​《徹底搞定JVM》​​​ JVM是Java中重要的也是較難了解的内容;

面試者對JVM的了解程度某種程度上反映了面試者技術深度,是以JVM也是面試時經常考察的内容;

本課程從JVM運作流程、資料運作時區域組成部分、類加載機制、垃圾回收機制、記憶體模型、常見面試題講解等角度出發,幫你徹底搞定JVM,拿下心儀Offer;

​​《Android性能優化參考》​​ 本課程包含了Android中的App啟動優化、UI優化、記憶體優化、圖檔優化、耗電量等常見的性能優化場景,通過學習此課程,你将對整個Android性能優化體系有清晰的認識。

性能優化作為Android進階開發的必備技能,也是大廠面試必考的題目,是展現一個人技術深度最好的試金石。

​​《面試之排序算法》​​ 排序算法是我們面試被問到最多的基礎算法,本課程詳細介紹了七種排序算法,包括插入排序、選擇排序、冒泡排序、謝爾排序、快速排序、堆積排序和二路并歸排序。每種算法都詳細介紹了核心思想、詳細步驟、時間複雜度和代碼實作,希望幫助大家深入了解排序算法,搞定面試!

​​《Android HyBrid App開發實戰》​​ 本課程為Android HyBrid App開發實戰課程,由淺入深,從三種App的曆史和特點開始,介紹了Android WebView的使用、Java和JS互動的原生方式、著名的WebView安全漏洞、JSBridge的原理和使用,最後通過一個網上商城的實戰綜合全部内容,讓同學們掌握并深入了解Android HyBrid App開發。

​​《AI導論》​​​ 介紹人工智能AI的誕生曆史和到現在為止的不同發展階段;介紹了AI領域中常見的名詞概念和其關系,包括機器學習、深度學習、神經網絡結構搜尋 NAS、生成對抗網絡 GAN等;最後對AI發展做出展望。

本課程屬于導論課程,旨在幫助同學們從宏觀層面把握AI,建立AI的知識體系。

​​《Java注解精講》​​​ 本課程詳細介紹了Java中的注解機制,包括注解的定義和分類,注解的使用和自定義,注解的源碼和架構分析;

本課程語言簡單凝練,視訊短小精悍,讓你一次徹底搞懂Java注解!

​​《Java反射精講》​​​ 反射是Java中重要的也是較難了解的内容;

本課程從反射的定義、作用、原理和使用出發,全方位幫你徹底搞定反射;

您的點贊是我前進的動力~