精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

工作五年了,居然還不懂門面模式!

開發 前端
門面模式(Facade Pattern)又叫作外觀模式,提供了一個統一的接口,用來訪問子系統中的一群接口。其主要特征是定義了一個高層接口,讓子系統更容易使用,屬于結構型設計模式。

[[403145]]

大家好,我是老田,從今天開始,本公眾號每周給大家送福利,送什么呢?肯定是技術書啦,不搞那么多花里胡哨的,參與方式見文末。

好啦,進入我們的主題,今天我給大家分享設計模式中的門面模式。用貼切的生活故事,以及真實項目場景來講設計模式,最后用一句話來總結這個設計模式。

故事

開發的朋友都知道,后端開發通常都是:

controller---servie---dao/mapper/repository

但是,我問過很多人,熟悉門面模式不?有的工作五年了都不知道。

今天老田,就帶你來看看門面模式。

門面模式概述

門面模式(Facade Pattern)又叫作外觀模式,提供了一個統一的接口,用來訪問子系統中的一群接口。其主要特征是定義了一個高層接口,讓子系統更容易使用,屬于結構型設計模式。

英文:

Provide a unified interface to a set of interfaces in asubsystem.Facade defines a higher-level interface that makes thesubsystem easier to use.

其實,在日常編碼工作中,我們都在有意無意地大量使用門面模式。但凡只要高層模塊需要調度多個子系統(2個以上類對象),我們都會自覺地創建一個新類封裝這些子系統,提供精簡的接口,讓高層模塊可以更加容易地間接調用這些子系統的功能。

生活中的案例

關于門面模式,在生活中的案例,非常之多。

案例1:去銀行辦理業務,有個前臺接待你,然后,這個前臺會問你需要辦什么業務,他會一個一個帶你辦理,這樣我們就不需要到處亂串、到處找對應業務窗口了。這個前臺人員就相當于門面模式。

案例2:我們建房子,如果沒有包工頭的話,那就是你自己要去找水泥工,電工、裝修工等。但如果有了包工頭,這些活你都不用干了,直接跟包工頭說,需要電工來把線路搞好。這個包工頭就可以理解為門面模式。

案例3:我們后端開發的controller,也可以理解為門面模式,比如說獲取用戶賬戶信息,先查UserService獲取用戶信息,然后查UserAccountService用戶賬戶信息。

門面模式適用場景

在軟件系統中,門面模式適用于以下應用場景。

  • 為一個復雜的模塊或子系統提供一個簡潔的供外界訪問的接口。
  • 希望提高子系統的獨立性時。
  • 當子系統由于不可避免的暫時原因導致可能存在Bug或性能相關問題時,可以通過門面模式提供一個高層接口,隔離客戶端與子系統的直接交互,預防代碼污染。

門面模式通用寫法

還是使用代碼來實現一個簡單的門面模式,因為咱們最喜歡的就是從demo開始。

業務場景:現在需要調用三個service的各自的方法:

  1. public class ServiceA { 
  2.     public void doA(){ 
  3.         System.out.println("do ServiceA"); 
  4.     } 
  5. public class ServiceB { 
  6.     public void doB(){ 
  7.         System.out.println("do ServiceB"); 
  8.     } 
  9.  
  10. public class ServiceC { 
  11.     public void doC(){ 
  12.         System.out.println("do ServiceC"); 
  13.     } 

在沒有引入門面模式的時候,客戶端是這么調用的:

  1. public class Client { 
  2.     public static void main(String[] args) { 
  3.         ServiceA serviceA=new ServiceA(); 
  4.         ServiceB serviceB=new ServiceB(); 
  5.         ServiceC serviceC=new ServiceC(); 
  6.  
  7.         serviceA.doA(); 
  8.         serviceB.doB(); 
  9.         serviceC.doC(); 
  10.     } 

每次,客戶端自己都需要創建很多service對象,如果涉及到有很多個service,那這代碼不是很尷尬嗎?會出現大量重復性的代碼。

運行結果

  1. do ServiceA 
  2. do ServiceB 
  3. do ServiceC 

下面我們就來加入門面模式:

  1. public class Facade { 
  2.     //是不是很像我們controller里注入各種service? 
  3.     private ServiceA serviceA = new ServiceA(); 
  4.     private ServiceB serviceB = new ServiceB(); 
  5.     private ServiceC serviceC = new ServiceC(); 
  6.  
  7.     public void doA() { 
  8.         serviceA.doA(); 
  9.     } 
  10.  
  11.     public void doB() { 
  12.         serviceB.doB(); 
  13.     } 
  14.  
  15.     public void doC() { 
  16.         serviceC.doC(); 
  17.     } 

客戶端變成了:

  1. public class Client { 
  2.     public static void main(String[] args) { 
  3.         //輕輕松松的搞定,只需要創建門面這個對象即可 
  4.         Facade facade=new Facade(); 
  5.         facade.doA(); 
  6.         facade.doB(); 
  7.         facade.doC(); 
  8.     } 

運行結果:

  1. do ServiceA 
  2. do ServiceB 
  3. do ServiceC 

門面模式UML圖

結合這個UML圖,在回顧銀行前臺人員和包工頭的案例,就更輕松的理解門面模式了。

門面模式中的角色

由上圖可以看到,門面模式主要包含2個角色。

  • 外觀角色(Facade):也叫作門面角色,是系統對外的統一接口。
  • 子系統角色(Service):可以同時有一個或多個Service。每個Service都不是一個單獨的類,而是一個類的集合。Service們并不知道Facade的存在,對于Service們而言,Facade 只是另一個客戶端而已(即Facade對ServiceA、ServiceB、ServiceC透明)。

門面模式的擴展

優點

● 減少系統的相互依賴   想想看,如果我們不使用門面模式,外界訪問直接深入到子系統內部,相互之間是一種強耦合關系,你死我就死,你活我才能活,這樣的強依賴是系統設計所不能接受的,門面模式的出現就很好地解決了該問題,所有的依賴都是對門面對象的依賴,與子系統無關。

● 提高了靈活性   依賴減少了,靈活性自然提高了。不管子系統內部如何變化,只要不影響到門面對象,任你自由活動。

● 提高安全性   想讓你訪問子系統的哪些業務就開通哪些邏輯,不在門面上開通的方法,你休想訪問到 。

缺點

當增加子系統和擴展子系統行為時,可能容易帶來未知風險。

不符合開閉原則。

某些情況下,可能違背單一職責原則。

大神們是如何使用的

在Spring中也是有大量使用到門面模式,比如說

  1. org.springframework.jdbc.support.JdbcUtils 

再來看看其中的方法

  1. public static void closeConnection(@Nullable Connection con) { 
  2.     con.close(); 
  3. public static Object extractDatabaseMetaData(DataSource dataSource, DatabaseMetaDataCallback action
  4.    throws MetaDataAccessException { 
  5.     Connection con = null
  6.   try { 
  7.    con = DataSourceUtils.getConnection(dataSource); 
  8.    DatabaseMetaData metaData = con.getMetaData(); 
  9.    if (metaData == null) { 
  10.       //..... 
  11.    } 
  12.    return action.processMetaData(metaData); 
  13.   } 
  14. ...... 

都是給我封裝好了方法,對于我們開發者來說,我只面向JdbcUtils這一個類就好了,我不用去管Connection、ResultSet等是怎么創建的,需要的時候,我調用JdbcUtils的對應方法即可獲得對應的對象。

在Mybatis中也是用到了門面模式,比如:

  1. org.apache.ibatis.session.Configuration 

在Configuration中以new開頭的方法,比如:

  1. public Executor newExecutor(Transaction transaction) { 
  2.     return newExecutor(transaction, defaultExecutorType); 
  3. public MetaObject newMetaObject(Object object) { 
  4.     return MetaObject.forObject(object, objectFactory, objectWrapperFactory, reflectorFactory); 
  5.  
  6. public ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) { 
  7.     ... 
  8.     return parameterHandler; 
  9.  
  10. public ResultSetHandler newResultSetHandler(Executor executor, MappedStatement mappedStatement, RowBounds rowBounds, ParameterHandler parameterHandler, 
  11.       ResultHandler resultHandler, BoundSql boundSql) { 
  12.    ... 
  13.     return resultSetHandler; 
  14.  
  15. public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement){ 
  16.    ... 

對于調用這些方法的地方,他并不知道是怎么new出來的對象,只管使用就行了。

在Tomcat中也有門面模式,比如:

  1. org.apache.catalina.connector.RequestFacade 

從名字就知道它用了門面模式。它封裝了非常多的request操作,也整合了很多servlet-api以外的內容,給用戶使用提供了很大便捷。同樣,Tomcat針對Response和Session也封裝了對應的ResponseFacade類和StandardSessionFacade類,感興趣的小伙伴可以深入了解一下。

PS:基本上所有以Facade結尾的類,都是使用到了門面模式。

參考:tom的設計模式課程

總結

好了,關于門面模式就分享這么多,看完本文是不是覺得門面模式其實很簡單的,另外在工作也可以考慮是不是可以把它用上,同時,面試的時候也可以用來吹吹。

最后用一句話來總結門面模式: 

打開一扇門,走向全世界。

本文轉載自微信公眾號「Java后端技術全?!?,可以通過以下二維碼關注。轉載本文請聯系Java后端技術全棧公眾號。

 

責任編輯:武曉燕 來源: Java后端技術全棧
相關推薦

2021-04-18 21:07:32

門面模式設計

2016-03-17 09:55:52

HDFSHadoop分布式文件系統

2025-10-17 09:56:18

2023-05-06 07:51:22

JavaFacade設計模式

2021-03-18 15:33:22

設計模式外觀

2022-02-15 22:45:00

前端設計模式

2024-02-19 13:11:38

門面模式系統

2022-11-14 08:44:56

前端門面模式接口

2021-09-06 07:58:47

鏈表數據結構

2022-05-27 21:56:55

索引存儲MySQL 存儲引擎

2019-06-19 09:07:06

HTTP代理協議

2020-02-24 21:50:24

瓶頸數據庫

2021-06-03 09:18:25

裝飾器模式包裝

2025-06-03 01:43:00

2024-01-05 15:06:04

元素程序員review

2023-01-02 10:08:42

StampedLocAQS框架

2024-08-02 16:31:12

2020-05-20 22:13:26

JVM加載機制虛擬機

2023-05-15 08:02:33

Kafka選舉Broker

2022-05-05 10:35:20

IT領域IT領導者
點贊
收藏

51CTO技術棧公眾號

欧美大黑帍在线播放| 91传媒视频免费| 欧美亚洲色综久久精品国产| 国模私拍国内精品国内av| 亚洲免费伊人电影| 久久大片网站| 夜夜爽8888| 综合国产精品| 亚洲男人av在线| 日韩av自拍偷拍| 国产社区精品视频| 26uuu久久天堂性欧美| 91精品久久久久久久久中文字幕| 国产一级做a爰片在线看免费| 香蕉久久99| 在线成人免费观看| 亚洲自偷自拍熟女另类| 超碰caoporn久久| 2019国产精品| www久久99| 亚洲性生活大片| 亚洲精品社区| 美女少妇精品视频| 蜜乳av中文字幕| 高清日韩欧美| 91精品国产综合久久久久久| 国产男女在线观看| 美女尤物在线视频| 亚洲欧洲日本在线| 秋霞久久久久久一区二区| 亚洲爱情岛论坛永久| 久久99精品久久久久久动态图| 91成人精品网站| 久久久久久久久久久久久久久久久| 日韩片欧美片| 亚洲色图第三页| 中文字幕精品视频在线| 午夜视频在线观看精品中文 | 亚洲精品一区二区三区蜜桃下载| 污污网站免费看| 欧美成人影院| 欧美午夜性色大片在线观看| 国产69精品久久久久999小说| 国产二区三区在线| 亚洲视频你懂的| 一区二区三区欧美在线| a中文在线播放| 国产校园另类小说区| 免费在线观看一区二区| 天堂资源中文在线| 91免费视频观看| 久久国产精品亚洲va麻豆| 免费观看a视频| 本田岬高潮一区二区三区| 丁香婷婷久久久综合精品国产 | 亚洲福利视频专区| 中文字幕一区二区三区人妻在线视频 | 午夜久久福利影院| 欧美又粗又长又爽做受| 成人女同在线观看| 污片在线观看一区二区| 欧美二区在线视频| 澳门成人av网| 日本道色综合久久| 爱情岛论坛亚洲首页入口章节| 99riav视频一区二区| 在线视频一区二区三| 欧美精品无码一区二区三区| 日本欧美不卡| 欧美日韩国产a| 日本女人性视频| 一区二区在线视频观看| 亚洲精品按摩视频| 免费观看av网站| 欧美影院三区| 不卡毛片在线看| 免费视频一二三区| 羞羞视频在线观看欧美| 国产精品96久久久久久| 国产伦精品一区二区三区视频痴汉| 国产综合成人久久大片91| 99久久99久久| 美州a亚洲一视本频v色道| 国产精品天天看| 大西瓜av在线| 忘忧草在线www成人影院| 欧美日本国产一区| 黄色免费看视频| av一区二区在线播放| 久久中文字幕一区| 精品欧美一区二区三区免费观看| 日本三级亚洲精品| 97视频热人人精品| 久香视频在线观看| 亚洲欧美日韩中文播放| 成 年 人 黄 色 大 片大 全| 日韩制服一区| 日韩一卡二卡三卡| 亚洲精品视频久久久| 亚洲精品成人影院| 青青久久aⅴ北条麻妃| 一女二男一黄一片| www..com久久爱| 这里只有精品66| 日韩伦理在线一区| 欧美一区二区三区视频在线观看| 亚洲国产欧美视频| 欧美另类专区| 国产精品偷伦视频免费观看国产| 亚洲精品无码久久久| 中文字幕不卡一区| 奇米精品一区二区三区| 免费一级欧美在线大片| 国产午夜精品一区理论片飘花 | 91福利国产精品| 国产精品无码自拍| 999精品视频| 国产97在线|亚洲| 老熟妇高潮一区二区高清视频| 国产精品黄色在线观看| 精品国产成人av在线免| 极品束缚调教一区二区网站 | 日韩精品一区二区三区四区| 亚洲色图欧美色| 亚洲在线视频| 国产日韩欧美精品| 影音先锋在线播放| 欧美精品99久久久**| 变态另类ts人妖一区二区| 亚洲福利久久| 国产 高清 精品 在线 a| 日本在线视频站| 欧美日韩精品专区| 精品国产aaa| 首页国产欧美久久| 欧美日本国产精品| 日本不卡1234视频| 亚洲激情国产精品| 日韩欧美视频在线免费观看| 国产成人亚洲综合a∨婷婷图片| 亚洲视频sss| 丁香婷婷久久| 色综合伊人色综合网站| 国产成人精品一区二区色戒| 久久精品人人做| 成人免费无码av| 久久最新网址| 日本道色综合久久影院| 国产理论电影在线观看| 91久久精品一区二区二区| xxxxx在线观看| 日韩avvvv在线播放| 天堂资源在线亚洲视频| 电影一区二区| 日韩视频中文字幕| 亚洲一卡二卡在线观看| 成人欧美一区二区三区白人 | 久久伊人91精品综合网站| 国产一区二区在线播放视频| 亚洲视频每日更新| 俄罗斯女人裸体性做爰| 狠狠色综合网| 亚洲xxx自由成熟| 黄色在线看片| 日韩精品一区二区三区第95| 中文字幕一区二区人妻视频| 国产精品久久久久精k8| 波多野结衣网页| 日韩亚洲精品在线| 欧美日韩一区二区视频在线观看| 欧美一级二级视频| 久久九九热免费视频| 亚洲第一成年人网站| 天天亚洲美女在线视频| 久久久久久久毛片| 国产精品88av| 国产成人精品视频免费看| japanese国产精品| 亚洲aⅴ男人的天堂在线观看| av在线加勒比| 国产亚洲一区二区精品| 国产精品一区二区三区在线免费观看| 亚洲一区精品在线| 巨胸大乳www视频免费观看| 久久精品国产精品亚洲精品| 老子影院午夜伦不卡大全| 怕怕欧美视频免费大全| 91九色综合久久| 欧美伦理91| 日韩在线www| 污视频网站在线播放| 欧美人狂配大交3d怪物一区| 日本特黄一级片| 亚洲欧美自拍偷拍| 成年人在线观看av| 国产精品1区2区3区在线观看| 日韩免费一级视频| 亚洲久久久久| 欧美国产一区二区在线| 欧美成人精品午夜一区二区| 欧美在线视频播放| 99在线视频观看| 国产亚洲xxx| 日韩中文字幕免费在线观看| 欧美视频在线播放| 国产午夜在线播放| 亚洲精品美国一| 超碰人人人人人人人| 99精品在线观看视频| 少妇欧美激情一区二区三区| 喷水一区二区三区| heyzo国产| 国内精品久久久久久久影视蜜臀| 日本电影一区二区三区| 欧美电影在线观看免费| 亚洲最大成人在线| 久久er热在这里只有精品66| 欧美一级视频在线观看| hd国产人妖ts另类视频| 欧美成人第一页| 日本欧美在线视频免费观看| 亚洲精品一区二区在线| 少妇人妻偷人精品一区二区| 日韩一区二区三区电影在线观看| 在线观看免费黄色小视频| 欧美性生交大片免费| 久久av高潮av无码av喷吹| 亚洲天堂久久久久久久| 国产欧美小视频| 亚洲国产高清在线| 免费一级做a爰片久久毛片潮| 成人激情小说乱人伦| av电影中文字幕| 国产成人av在线影院| 欧美视频亚洲图片| 老司机精品视频在线| 免费看污污网站| 蜜桃免费网站一区二区三区| 超碰av在线免费观看| 久久成人免费| 成年人在线看片| 美女久久网站| 91在线视频观看免费| 日本vs亚洲vs韩国一区三区二区 | 久久精品视频2| 欧美性69xxxx肥| 中文字幕精品无码一区二区| 福利微拍一区二区| 男人天堂2024| 日本高清视频一区二区| 中文字幕一区二区三区四区视频| 在线观看中文字幕不卡| 中文字幕一区2区3区| 欧美美女bb生活片| 国产普通话bbwbbwbbw| 欧美一级艳片视频免费观看| 精品欧美一区二区精品少妇| 精品久久国产老人久久综合| 欧美在线 | 亚洲| 日韩国产中文字幕| 精品乱码一区二区三四区视频 | 国产二区三区在线| 欧美日韩国产91| 2020日本在线视频中文字幕| 69久久夜色精品国产69乱青草| 毛片在线网站| 国产精品久久久久久av| 亚洲国产天堂| 7777精品伊久久久大香线蕉语言| jazzjazz国产精品麻豆| 久久偷看各类wc女厕嘘嘘偷窃| 国产真实有声精品录音| 中文字幕久久综合| 国产在线日韩| 北条麻妃在线一区| 久久99精品视频| 中文视频在线观看| 国产亚洲短视频| 精品国产视频在线观看| 午夜欧美视频在线观看| 成人黄色免费网| 欧美大片一区二区| 男人的天堂在线视频| 日韩视频在线免费| 亚洲精品日产| 91精品啪aⅴ在线观看国产| 大桥未久女教师av一区二区| 神马影院午夜我不卡| 欧美激情1区| av片中文字幕| 国产精品自在在线| 中文字幕网站在线观看| 亚洲影院久久精品| 中文字幕av久久爽| 亚洲风情亚aⅴ在线发布| 日本高清在线观看wwwww色| 韩国国内大量揄拍精品视频| 成人精品动漫| 久久99精品久久久久久久久久| 日韩一区三区| 日本免费不卡一区二区| 国产在线精品免费av| 极品粉嫩小仙女高潮喷水久久| 亚洲少妇30p| 国产精品尤物视频| 日韩高清av在线| 91精品久久| 国产美女直播视频一区| 私拍精品福利视频在线一区| 在线观看三级网站| 奇米一区二区三区av| 精品人妻一区二区三区香蕉 | 国产精华7777777| 亚洲精品720p| 日本无删减在线| 成人激情视频小说免费下载| 欧美精品羞羞答答| 欧美精品99久久| av高清久久久| 久久精品久久国产| 91精品国产综合久久久久久久| 第一页在线观看| 日本午夜精品理论片a级appf发布| jizz性欧美23| 国产黄色激情视频| 国产麻豆精品在线观看| 午夜黄色福利视频| 在线观看一区二区精品视频| 日本电影一区二区在线观看| 91精品国产高清久久久久久久久| 99久久香蕉| 男女啪啪免费观看| 国产成人午夜电影网| avove在线播放| 欧美一区二区视频在线观看| 美女写真理伦片在线看| 国产中文字幕亚洲| 久久精品国产99久久| 999精彩视频| 国产精品剧情在线亚洲| 艳妇乳肉豪妇荡乳av无码福利 | 91精品国产91久久久久久一区二区| 国产黄色免费在线观看| 国产精品免费久久久| 精品视频亚洲| 色噜噜狠狠永久免费| 国产精品欧美一级免费| 亚洲精品一区二区二区| 少妇av一区二区三区| 成年永久一区二区三区免费视频| 制服丝袜综合日韩欧美| 国内成人精品2018免费看| 三级影片在线看| 日韩无一区二区| 国产v日韩v欧美v| 日本精品免费| 久久99久久99小草精品免视看| 一级片一级片一级片| 欧美一区二区视频观看视频| 欧美1234区| 久久婷婷人人澡人人喊人人爽| 久久精品首页| 亚洲国产精品一区二区久久hs| 欧美一区二区三区四区高清| 超碰97免费在线| 欧美日韩另类丝袜其他| 精一区二区三区| 久久久综合久久久| 亚洲精品理论电影| 99久久精品一区二区成人| 日韩视频在线免费播放| 成人性色生活片| 亚洲GV成人无码久久精品| 日韩中文字幕网站| 高潮按摩久久久久久av免费| 国产精品无码一本二本三本色| 国产精品久久久久久亚洲毛片| 不卡视频免费在线观看| 欧美一级片在线播放| 999精品视频| 亚洲蜜桃精久久久久久久久久久久 | 亚洲一区www| 日韩影片在线观看| 97在线播放视频| 亚洲激情男女视频| 巨骚激情综合| 成人欧美一区二区| 日韩av网站在线观看| 精品国产乱码久久久久久鸭王1| 亚洲风情亚aⅴ在线发布| 日韩一区二区三区四区五区| 男人添女荫道口喷水视频| 久久久久国色av免费看影院| av加勒比在线| 国产精品aaaa| 合欧美一区二区三区| 又嫩又硬又黄又爽的视频| 日韩精品在线观看一区| 日韩在线观看中文字幕| 男操女免费网站|