日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中的门面设计模式,非常有用!

發布時間:2025/3/21 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中的门面设计模式,非常有用! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

門面設計模式又叫外觀設計模式,其核心思想正如其字面意思,向用戶提供一個門戶,用戶只需要訪問這個門戶來獲取他們想要的數據,無需管理這個門戶內部的構成,也無需知道里面的運行流程等等,對于開發者來說,使用門面模式,我們可以只向用戶提供他們想要的東西,而不要暴露所有的信息。

上面的摘要簡單描述了一下門面設計模式的思想,下面我們通過日常生活中的例子來幫助大家理解這一思想:

大家都知道,一個電腦的主機是由很多部件組成的,比較重要的有顯卡,CPU,主板,網卡,聲卡等。

如果我們需要使用計算機,那么我們就需要讓他們協調運作,比如簡單的開機動作,我們需要開啟這些部件,但是在實際的操作中,我們只需要按一下開機鍵,電腦就啟動了。 這個開機鍵就是電腦門面,我們只需要向這個門面發送指令,計算機的內部就就會自動運行一系列操作去啟動所有的部件,而不需要我們手動一個一個的去啟動。 而且最關鍵的是,計算機只向我們暴露了一個開關,而沒有將其中的部件暴露給我們,增加了其安全性,當計算機的啟動流程改變(操作擴展)時,用戶是感覺不到的。

下面我們就將上面的舉例轉換成代碼的實現吧!

主板的啟動和關閉:

public?class?MainBoard?{public?void?start(){System.out.println("main board is open");}public?void?end(){System.out.println("main board is close");} }

顯卡的啟動和關閉:

public?class?VideoCard?{public?void?start(){System.out.println("video card is open");}public?void?end(){System.out.println("video card is close");} }

網卡的啟動和關閉:

public?class?NetCard?{public?void?start(){System.out.println("net card is open");}public?void?end(){System.out.println("net card is close");} }

將上面的操作封裝到一個門面之中:

public?class?FacadeInstall?{private?MainBoard mainBoard;private?NetCard netCard;private?VideoCard videoCard;public?FacadeInstall(){mainBoard =?new?MainBoard();netCard =?new?NetCard();videoCard =?new?VideoCard();}public?void?start(){mainBoard.start();netCard.start();videoCard.start();} }

測試類:

public?class?FacadeTest?{public?static?void?main(String[] args)?{FacadeInstall facadeInstall =?new?FacadeInstall();facadeInstall.start();} }

運行結果:

main board?is?opennet card?is?openvideo card?is?open

我們只需要調用門面對象的啟動方法,就相當于調用了三個部件的啟動方法,我們無需知道門面你不是怎么調用的,而且,如果電腦的組件進行了擴展,我們只需要在門面類中進行功能的擴展就可以了,客戶是感覺不到的。 在上面的代碼中,我們發現門面類里只調用了啟動的方法,沒有關閉的方法給我們調用,這就是門面設計模式的另一個優勢,它可以將不必要對客戶開放的方法隱藏起來,以保證安全性。

例如在tomcat中,當執行doGet或者doPost的時候,其中的參數request和response已經是門面類,因為tomcat在這之前,會調用:

filterChain.doFilter(request.getRequest(),?response.getResponse())

而這兩個參數的源碼如下:

public?HttpServletRequest?getRequest()?{if?(facade ==?null) {facade =?new?RequestFacade(this);}return?facade;}public?HttpServletResponse?getResponse()?{if?(facade ==?null) {facade =?new?ResponseFacade(this);}return?(facade); }

其實門面設計模式使用還是比較廣泛的,如果shiro的核心組件SecurityManager就是一個典型的門面設計模式。

作者:Mazin

https://my.oschina.net/u/3441184/blog/889706

總結

以上是生活随笔為你收集整理的Java中的门面设计模式,非常有用!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。