軟件架構(gòu)的10個常見模式

企業(yè)規(guī)模的軟件系統(tǒng)該如何設(shè)計呢鱼蝉?在開始寫代碼之前,我們需要選擇一個合適的架構(gòu)箫荡,這個架構(gòu)將決定軟件實施過程中的功能屬性和質(zhì)量屬性魁亦。因此,了解軟件設(shè)計中的不同架構(gòu)模式對我們的軟件設(shè)計會有較大的幫助羔挡。

什么是架構(gòu)模式洁奈?根據(jù)維基百科:架構(gòu)模式是針對特定軟件架構(gòu)場景常見問題的通用、可重用解決方案绞灼。架構(gòu)模式類似于軟件設(shè)計模式利术,但范圍更廣。本文將簡要解釋10種常見架構(gòu)模式及其用法低矮、優(yōu)缺點印叁。

分層模式(Layered pattern)

客戶端-服務(wù)器模式(Client-server pattern)

主從模式(Master-slave pattern)

管道-過濾器模式(Pipe-filter pattern)

代理模式(Broker pattern)

點對點模式(Peer-to-peer pattern)

事件-總線模式(Event-bus pattern)

模型-視圖-控制器模式(Model-view-controller pattern)

黑板模式(Blackboard pattern)

解釋器模式(Interpreter pattern)

1. 分層模式

此模式用于可分解為子任務(wù)的結(jié)構(gòu)化程序,每個子任務(wù)都位于特定的抽象層級,每一層都為上一層提供服務(wù)轮蜕。一般信息系統(tǒng)最常見的4個層次如下昨悼。

表示層(也稱為UI層)

應(yīng)用層(也稱為服務(wù)層)

業(yè)務(wù)邏輯層(也稱為領(lǐng)域?qū)?

數(shù)據(jù)訪問層(也稱為持久層)

應(yīng)用場景:

一般的桌面應(yīng)用程序

電子商務(wù)web應(yīng)用程序

一般的移動App


深入淺出。高架構(gòu)肠虽。 性能調(diào)優(yōu)幔戏、Spring玛追,MyBatis税课,Netty源碼分析和大數(shù)據(jù)等多個知識點高級進階干貨的直播免費學(xué)習(xí)權(quán)限? 都是大牛帶飛?讓你少走很多的彎路的?群號是:?798891710對了?小白勿進?最好是有開發(fā)經(jīng)驗?

3.主從模式

這種模式由兩部分組成:主節(jié)點和從節(jié)點。主節(jié)點將工作分配給相同的從節(jié)點痊剖,并根據(jù)從節(jié)點返回的結(jié)果計算最終結(jié)果韩玩。

應(yīng)用場景:

在數(shù)據(jù)庫復(fù)制中,主數(shù)據(jù)庫被視為權(quán)威源數(shù)據(jù)庫陆馁,從數(shù)據(jù)庫與之同步找颓。

通過總線連接到計算機系統(tǒng)(主驅(qū)動器和從驅(qū)動器)的外圍設(shè)備。

進程內(nèi)的多線程應(yīng)用叮贩。


?加java高級架構(gòu)師群獲取Java工程化击狮、高性能及分布式、高性能益老、深入淺出彪蓬。高架構(gòu)。 性能調(diào)優(yōu)捺萌、Spring档冬,MyBatis,Netty源碼分析和大數(shù)據(jù)等多個知識點高級進階干貨的直播免費學(xué)習(xí)權(quán)限? 都是大牛帶飛?讓你少走很多的彎路的?群號是:?798891710對了?小白勿進?最好是有開發(fā)經(jīng)驗?

4.管道-過濾器模式

這種模式可用于構(gòu)造生成和處理數(shù)據(jù)流的系統(tǒng)桃纯。每個處理步驟都包含一個過濾器組件酷誓。要處理的數(shù)據(jù)通過管道傳遞。這些管道可用于緩沖或同步目的态坦。

應(yīng)用場景:

編譯器盐数。連續(xù)過濾器執(zhí)行詞法分析、詞法解析伞梯、語義分析和代碼生成玫氢。

生物信息學(xué)的工作流

工具鏈式的應(yīng)用程序


5. 代理模式

這種模式通過解耦組件來構(gòu)造分布式系統(tǒng)。這些組件可以通過遠程服務(wù)調(diào)用彼此交互壮锻。代理組件負責(zé)協(xié)調(diào)組件之間的通信琐旁。服務(wù)器向代理發(fā)布功能(服務(wù)和特征)〔滦澹客戶端向代理請求服務(wù)灰殴,然后代理將客戶端重定向到合適的服務(wù)。需要注意broker,agent牺陶,proxy以及delegate的區(qū)別伟阔。

應(yīng)用場景:

消息代理軟件,例如:Apache ActiveMQ掰伸、Apache Kafka皱炉、RabbitMQ和JBoss消息傳遞。

網(wǎng)絡(luò)傳輸中的代理軟件狮鸭。


?加java高級架構(gòu)師群獲取Java工程化合搅、高性能及分布式、高性能、深入淺出。高架構(gòu)堂油。 性能調(diào)優(yōu)、Spring赌髓,MyBatis,Netty源碼分析和大數(shù)據(jù)等多個知識點高級進階干貨的直播免費學(xué)習(xí)權(quán)限? 都是大牛帶飛?讓你少走很多的彎路的?群號是:?798891710對了?小白勿進?最好是有開發(fā)經(jīng)驗?

6. P2P模式

在這種模式中催跪,每個組件都稱為對等節(jié)點锁蠕。對等節(jié)點既可以作為客戶機(從其他對等節(jié)點請求服務(wù)),也可以作為服務(wù)器(向其他對等節(jié)點提供服務(wù))懊蒸。對等節(jié)點可以充當(dāng)單個客戶機或服務(wù)器荣倾,也可以同時充當(dāng)客戶機和服務(wù)器,并且可以隨著時間變化動態(tài)地更改角色榛鼎。

使用場景:

文件共享網(wǎng)絡(luò)逃呼,例如Gnutella和G2等。

多媒體協(xié)議者娱,如P2PTV和PDTP抡笼。


7. 事件-總線模式

這種模式也被稱為訂閱發(fā)布模式,主要處理事件黄鳍,有4個主要組件:事件源推姻、事件監(jiān)聽者、通道和事件總線框沟。事件源將消息發(fā)布到事件總線上的特定通道藏古,監(jiān)聽者訂閱特定的通道。消息發(fā)布到監(jiān)聽者之前訂閱的通道忍燥,監(jiān)聽者將收到消息的通知拧晕。

使用場景:

安卓開發(fā)

通知服務(wù)

注冊中心


8. 模型-視圖-控制器模式

這種模式,也稱為MVC模式梅垄,將一個交互應(yīng)用程序分為三個部分:

模型-包含核心功能和數(shù)據(jù)

視圖——向用戶顯示信息(可以定義多個視圖)

控制器——處理來自用戶的輸入

這樣做是為了將信息的內(nèi)部表示厂捞、信息呈現(xiàn)給用戶的方式、接受用戶輸入的方式分離開來。這種模式解耦組件并允許有效的代碼重用靡馁。

應(yīng)用場景:

一般的web應(yīng)用程序架構(gòu)

Django和Rails等Web框架

一般的GUI 應(yīng)用程序


9. 黑板模式

這種模式對于沒有確定解決方案策略的問題非常有用欲鹏。黑板圖案由三個主要部分組成:

黑板:一個結(jié)構(gòu)化的全局內(nèi)存,包含來自解決方案空間的對象

知識源:具有自己表示形式的專門化模塊

控制組件:選擇臭墨、配置和執(zhí)行模塊

所有的組件都可以到達黑板赔嚎。組件可以生成添加到黑板上的新數(shù)據(jù)對象。組件在黑板上查找特定類型的數(shù)據(jù)胧弛,并通過與現(xiàn)有的知識源進行模式匹配找到這些數(shù)據(jù)尤误。

應(yīng)用場景:

語音識別

車輛識別及追蹤

蛋白質(zhì)結(jié)構(gòu)識別

聲納信號的解釋


?加java高級架構(gòu)師群獲取Java工程化、高性能及分布式叶圃、高性能袄膏、深入淺出。高架構(gòu)掺冠。 性能調(diào)優(yōu)、Spring码党,MyBatis德崭,Netty源碼分析和大數(shù)據(jù)等多個知識點高級進階干貨的直播免費學(xué)習(xí)權(quán)限? 都是大牛帶飛?讓你少走很多的彎路的?群號是:?798891710對了?小白勿進?最好是有開發(fā)經(jīng)驗?

10. 解釋器模式

這種模式用于設(shè)計一個解釋專用語言編寫的程序組件。它主要指定如何評估每一行程序揖盘,即用特定語言編寫的句子或表達式眉厨。其基本思想是語言的每個符號都有一個類。

應(yīng)用場景:

數(shù)據(jù)庫查詢語言兽狭,如SQL憾股。

用于描述通信協(xié)議的語言。


】下面的表格總結(jié)了每種架構(gòu)模式的優(yōu)缺點箕慧。


?加java高級架構(gòu)師群獲取Java工程化服球、高性能及分布式、高性能颠焦、深入淺出斩熊。高架構(gòu)。 性能調(diào)優(yōu)伐庭、Spring粉渠,MyBatis,Netty源碼分析和大數(shù)據(jù)等多個知識點高級進階干貨的直播免費學(xué)習(xí)權(quán)限? 都是大牛帶飛?讓你少走很多的彎路的?群號是:?798891710對了?小白勿進?最好是有開發(fā)經(jīng)驗?

望覺得這篇文章有用圾另,我們也很想聽聽你的想法霸株。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市集乔,隨后出現(xiàn)的幾起案子去件,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箫攀,死亡現(xiàn)場離奇詭異肠牲,居然都是意外死亡,警方通過查閱死者的電腦和手機靴跛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門缀雳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梢睛,你說我怎么就攤上這事肥印。” “怎么了绝葡?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵深碱,是天一觀的道長。 經(jīng)常有香客問我藏畅,道長敷硅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任愉阎,我火速辦了婚禮绞蹦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榜旦。我一直安慰自己幽七,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布溅呢。 她就那樣靜靜地躺著澡屡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咐旧。 梳的紋絲不亂的頭發(fā)上驶鹉,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音休偶,去河邊找鬼梁厉。 笑死,一個胖子當(dāng)著我的面吹牛踏兜,可吹牛的內(nèi)容都是我干的词顾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼碱妆,長吁一口氣:“原來是場噩夢啊……” “哼肉盹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疹尾,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤上忍,失蹤者是張志新(化名)和其女友劉穎骤肛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窍蓝,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡腋颠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吓笙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淑玫。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖面睛,靈堂內(nèi)的尸體忽然破棺而出絮蒿,到底是詐尸還是另有隱情,我是刑警寧澤叁鉴,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布土涝,位于F島的核電站,受9級特大地震影響幌墓,放射性物質(zhì)發(fā)生泄漏但壮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一克锣、第九天 我趴在偏房一處隱蔽的房頂上張望茵肃。 院中可真熱鬧,春花似錦袭祟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸟召,卻和暖如春胆绊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欧募。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工压状, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跟继。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓种冬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舔糖。 傳聞我的和親對象是個殘疾皇子娱两,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容