亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

23種設(shè)計模式(8) java外觀模式

 更新時間:2017年11月09日 10:45:17   作者:阿木俠  
這篇文章主要為大家詳細(xì)介紹了23種設(shè)計模式之java外觀模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

23種設(shè)計模式第八篇:java外觀模式

定義: 

       為子系統(tǒng)中的一組接口提供一個一致的界面,F(xiàn)acade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。

角色:

        1、外觀(Facade)角色 :客戶端可以調(diào)用這個角色的方法。此角色知曉相關(guān)子系統(tǒng)的功能和責(zé)任。在正常情況下,本角色會將所有從客戶端發(fā)來的請求委派到相應(yīng)的子系統(tǒng)去。 

       2、子系統(tǒng)(SubSystem)角色 :可以同時有一個或者多個子系統(tǒng)。每個子系統(tǒng)都不是一個單獨(dú)的類,而是一個類的集合。每個子系統(tǒng)都可以被客戶端直接調(diào)用,或者被外觀角色調(diào)用。子系統(tǒng)并不知道外觀角色的存在,對于子系統(tǒng)而言,外觀角色僅僅是另外一個客戶端而已。

示意圖:


示例:

1、子系統(tǒng)角色,由若干個類組成

public class SubClass1 { 
 public void method1(){
  System.out.println("這是子系統(tǒng)類1中的方法1");
 } 
 public void method2(){
  System.out.println("這是子系統(tǒng)類1中的方法2");
 }
}
public class SubClass2 { 
 public void method1(){
  System.out.println("這是子系統(tǒng)類2中的方法1");
 } 
 public void method2(){
  System.out.println("這是子系統(tǒng)類2中的方法2");
 }
}
public class SubClass3 { 
 public void method1(){
  System.out.println("這是子系統(tǒng)類3中的方法1");
 } 
 public void method2(){
  System.out.println("這是子系統(tǒng)類3中的方法2");
 }
}

2、外觀角色類

public class FacadeClass { 
 public void FacadeMethod(){
  SubClass1 s1 = new SubClass1();
  s1.method1();
  SubClass2 s2 = new SubClass2();
  s2.method1();
  SubClass3 s3 = new SubClass3();
  s3.method1();
 }
}

3、客戶端測試方法

public class ClientClass {
 public static void main(String[] args) {
  FacadeClass fc = new FacadeClass();
  fc.FacadeMethod();
 }
}

        Facade類其實相當(dāng)于子系統(tǒng)中SubClass類的外觀界面,有了這個Facade類,那么客戶端就不需要親自調(diào)用子系統(tǒng)中的那些具體實現(xiàn)的子類了,也不需要知道系統(tǒng)內(nèi)部的實現(xiàn)細(xì)節(jié),甚至都不需要知道這些子類的存在,客戶端只需要跟Facade類交互就好了,從而更好地實現(xiàn)了客戶端和子系統(tǒng)中具體類的解耦,讓客戶端更容易地使用系統(tǒng)。
        同時,這樣定義一個Facade類可以有效地屏蔽內(nèi)部的細(xì)節(jié),免得客戶端去調(diào)用Module類時,發(fā)現(xiàn)一些不需要它知道的方法。如上代碼,我的所有子類中的方法二都是方法一調(diào)用的方法,是配合方法一的,他們不需要被客戶端調(diào)用,而且具有一定的保密性,這樣使用外觀模式時就可以不被客戶端知道。

優(yōu)點:

        實現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系。
        客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易。

適用場景:

        設(shè)計初期階段,應(yīng)該有意識的將不同層分離,層與層之間建立外觀模式。
        開發(fā)階段,子系統(tǒng)越來越復(fù)雜,增加外觀模式提供一個簡單的調(diào)用接口。
        維護(hù)一個大型遺留系統(tǒng)的時候,可能這個系統(tǒng)已經(jīng)非常難以維護(hù)和擴(kuò)展,但又包含非常重要的功能,為其開發(fā)一個外觀類,以便新系統(tǒng)與其交互。

外觀模式總結(jié):

1、外觀模式為復(fù)雜子系統(tǒng)提供了一個簡單接口,并不為子系統(tǒng)添加新的功能和行為。
2、外觀模式實現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系。
3、外觀模式?jīng)]有封裝子系統(tǒng)的類,只是提供了簡單的接口。 如果應(yīng)用需要,它并不限制客戶使用子系統(tǒng)類。因此可以靈活的在系統(tǒng)易用性與通用性之間選擇。
4、外觀模式注重的是簡化接口,它更多的時候是從架構(gòu)的層次去看整個系統(tǒng),而并非單個類的層次。

轉(zhuǎn)自:java知音

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 打印Java程序的線程棧信息方式

    打印Java程序的線程棧信息方式

    這篇文章主要介紹了打印Java程序的線程棧信息方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • MyBatisPlus-QueryWrapper多條件查詢及修改方式

    MyBatisPlus-QueryWrapper多條件查詢及修改方式

    這篇文章主要介紹了MyBatisPlus-QueryWrapper多條件查詢及修改方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 使用Gradle打依賴包失敗的問題及解決

    使用Gradle打依賴包失敗的問題及解決

    這篇文章主要介紹了使用Gradle打依賴包失敗的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Springboot實現(xiàn)ENC加密的詳細(xì)流程

    Springboot實現(xiàn)ENC加密的詳細(xì)流程

    在項目開發(fā)過程中,需要配置數(shù)據(jù)庫連接密碼、Redis密碼、網(wǎng)盤上傳的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心,這些信息如果泄露,還是會造成一定的困擾,下面這篇文章主要給大家介紹了關(guān)于Springboot實現(xiàn)ENC加密的詳細(xì)流程,需要的朋友可以參考下
    2023-06-06
  • 解析Java格式字符串的使用

    解析Java格式字符串的使用

    本文通過實例給大家介紹了java格式字符串的使用,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-02-02
  • Spring中@Async注解執(zhí)行異步任務(wù)的方法

    Spring中@Async注解執(zhí)行異步任務(wù)的方法

    在業(yè)務(wù)處理中,有些業(yè)務(wù)使用異步的方式更為合理,這篇文章主要介紹了Spring中@Async注解執(zhí)行異步任務(wù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Java實現(xiàn)九宮格的簡單實例

    Java實現(xiàn)九宮格的簡單實例

    這篇文章主要介紹了 Java實現(xiàn)九宮格的簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 記一次springboot中用undertow的坑

    記一次springboot中用undertow的坑

    這篇文章主要介紹了記一次springboot中用undertow的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Netty?拆包沾包問題解決方案詳解

    Netty?拆包沾包問題解決方案詳解

    這篇文章主要為大家介紹了Netty?拆包沾包問題解決方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Java使用條件語句和循環(huán)結(jié)構(gòu)確定控制流(實例)

    Java使用條件語句和循環(huán)結(jié)構(gòu)確定控制流(實例)

    下面小編就為大家?guī)硪黄狫ava使用條件語句和循環(huán)結(jié)構(gòu)確定控制流(實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論