最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

定義: 

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

角色:

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

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

示意圖:


示例:

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

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

2、外觀角色類(lèi)

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、客戶(hù)端測(cè)試方法

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

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

優(yōu)點(diǎn):

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

適用場(chǎng)景:

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

外觀模式總結(jié):

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

轉(zhuǎn)自:java知音

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

相關(guān)文章

  • 詳解一個(gè)簡(jiǎn)單的Servlet容器的設(shè)計(jì)與實(shí)現(xiàn)

    詳解一個(gè)簡(jiǎn)單的Servlet容器的設(shè)計(jì)與實(shí)現(xiàn)

    Servlet算是Java Web開(kāi)發(fā)請(qǐng)求鏈路調(diào)用棧中底層的一個(gè)技術(shù),而了解一個(gè)Servlet容器的實(shí)現(xiàn)有助于更好的理解JavaWeb開(kāi)發(fā),所以下面就來(lái)看看如何設(shè)計(jì)與實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Servlet容器吧
    2023-07-07
  • Java中的hashcode方法介紹

    Java中的hashcode方法介紹

    這篇文章主要介紹了Java中的hashcode方法介紹,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • java.sql.SQLException:com.mysql.cj.jdbc.Driver報(bào)錯(cuò)問(wèn)題解決

    java.sql.SQLException:com.mysql.cj.jdbc.Driver報(bào)錯(cuò)問(wèn)題解決

    這篇文章主要給大家介紹了關(guān)于java.sql.SQLException:com.mysql.cj.jdbc.Driver報(bào)錯(cuò)問(wèn)題解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 如何使用Spring boot的@Transactional進(jìn)行事務(wù)管理

    如何使用Spring boot的@Transactional進(jìn)行事務(wù)管理

    這篇文章介紹了SpringBoot中使用@Transactional注解進(jìn)行聲明式事務(wù)管理的詳細(xì)信息,包括基本用法、核心配置參數(shù)、關(guān)鍵注意事項(xiàng)、調(diào)試技巧、最佳實(shí)踐以及完整示例,感興趣的朋友一起看看吧
    2025-02-02
  • java建立子類(lèi)方法總結(jié)

    java建立子類(lèi)方法總結(jié)

    在本篇文章里小編給大家分享了關(guān)于java建子類(lèi)的步驟和方法,需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • SpringCloud OpenFeign與Ribbon客戶(hù)端配置詳解

    SpringCloud OpenFeign與Ribbon客戶(hù)端配置詳解

    在springcloud中,openfeign是取代了feign作為負(fù)載均衡組件的,feign最早是netflix提供的,他是一個(gè)輕量級(jí)的支持RESTful的http服務(wù)調(diào)用框架,內(nèi)置了ribbon,而ribbon可以提供負(fù)載均衡機(jī)制,因此feign可以作為一個(gè)負(fù)載均衡的遠(yuǎn)程服務(wù)調(diào)用框架使用
    2022-11-11
  • Spring中的注解之@Override和@Autowired

    Spring中的注解之@Override和@Autowired

    看別人寫(xiě)的代碼,經(jīng)常會(huì)用到 @Override 和 @Autowired 這兩個(gè)注解.這邊總結(jié)一下這兩個(gè)注解的作用,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java工作環(huán)境的配置與Eclipse的安裝過(guò)程

    Java工作環(huán)境的配置與Eclipse的安裝過(guò)程

    這篇文章主要介紹了Java工作環(huán)境的配置與Eclipse的安裝過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Spring AOP 切面@Around注解的用法說(shuō)明

    Spring AOP 切面@Around注解的用法說(shuō)明

    這篇文章主要介紹了Spring AOP 切面@Around注解的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • java_String和StringBuffer區(qū)別分析

    java_String和StringBuffer區(qū)別分析

    JAVA平臺(tái)提供了兩個(gè)類(lèi):String和StringBuffer,它們可以?xún)?chǔ)存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類(lèi)提供了數(shù)值不可改變的字符串。
    2013-04-04

最新評(píng)論

义乌市| 舟曲县| 鄂温| 酒泉市| 枝江市| 金阳县| 武山县| 楚雄市| 新安县| 依兰县| 廉江市| 寿光市| 松阳县| 新疆| 舒兰市| 桃园县| 英德市| 绥宁县| 商丘市| 新建县| 清镇市| 大兴区| 广饶县| 九龙城区| 自治县| 新平| 英德市| 剑川县| 旅游| 浦东新区| 衡南县| 高陵县| 青州市| 晋宁县| 天峻县| 淮安市| 安徽省| 河西区| 乐至县| 余庆县| 化德县|