语言与golang语言运行速度_Golang语言情怀第13期 Go 语言设计模式 介绍
設(shè)計模式是什么
俗話說:站在別人的肩膀上,我們會看得更遠(yuǎn)。設(shè)計模式的出現(xiàn)可以讓我們站在前人的肩膀上,通過一些成熟的設(shè)計方案來指導(dǎo)新項目的開發(fā)和設(shè)計,以便于我們開發(fā)出具有更好的靈活性和可擴展性,也更易于復(fù)用的軟件系統(tǒng)。設(shè)計模式的一般定義如下:
設(shè)計模式(Design Pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié),使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解并且保證代碼可靠性。
狹義的設(shè)計模式是指GoF在《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書中所介紹的23種經(jīng)典設(shè)計模式,不過設(shè)計模式并不僅僅只有這23種,隨著軟件開發(fā)技術(shù)的發(fā)展,越來越多的新模式不斷誕生并得以應(yīng)用。設(shè)計模式一般包含模式名稱、問題、目的、解決方案、效果等組成要素,其中關(guān)鍵要素是模式名稱、問題、解決方案和效果。模式名稱(Pattern Name)通過一兩個詞來描述模式的問題、解決方案和效果,以便更好地理解模式并方便開發(fā)人員之間的交流,絕大多數(shù)模式都是根據(jù)其功能或模式結(jié)構(gòu)來命名的;
問題(Problem)描述了應(yīng)該在何時使用模式,它包含了設(shè)計中存在的問題以及問題存在的原因;
解決方案(Solution)描述了一個設(shè)計模式的組成成分,以及這些組成成分之間的相互關(guān)系,各自的職責(zé)和協(xié)作方式,通常解決方案通過UML類圖和核心代碼來進(jìn)行描述;
效果(Consequences)描述了模式的優(yōu)缺點以及在使用模式時應(yīng)權(quán)衡的問題。
Go語言模式分類
在分類之前,我們需要明白模式的大體分類,以及他們都分別代表什么意思:創(chuàng)建模式:對類的實例化過程的抽象。一些系統(tǒng)在創(chuàng)建對象時,需要動態(tài)地決定怎樣創(chuàng)建對象,創(chuàng)建哪些對象,以及如何組合和表示這些對象。創(chuàng)建模式描述了怎樣構(gòu)造和封裝這些動態(tài)的決定。包含類的創(chuàng)建模式和對象的創(chuàng)建模式。
結(jié)構(gòu)模式:描述如何將類或?qū)ο蠼Y(jié)合在一起形成更大的結(jié)構(gòu)。分為類的結(jié)構(gòu)模式和對象的結(jié)構(gòu)模式。類的結(jié)構(gòu)模式使用繼承把類,接口等組合在一起,以形成更大的結(jié)構(gòu)。類的結(jié)構(gòu)模式是靜態(tài)的。對象的結(jié)構(gòu)模式描述怎樣把各種不同類型的對象組合在一起,以實現(xiàn)新的功能的方法。對象的結(jié)構(gòu)模式是動態(tài)的。
行為模式:對在不同的對象之間劃分責(zé)任和算法的抽象化。不僅僅是關(guān)于類和對象的,并是關(guān)于他們之間的相互作用。類的行為模式使用繼承關(guān)系在幾個類之間分配行為。對象的行為模式則使用對象的聚合來分配行為。
模式分類表:
| 創(chuàng)建模式 | Abstract Factory | 抽象工廠 | 提供用于創(chuàng)建相關(guān)對象系列的接口 |
| Builder | 生成器 | 使用簡單對象構(gòu)建復(fù)雜對象 | |
| Factory Method | 工廠方法 | 將對象的實例化延遲到用于創(chuàng)建實例的專用函數(shù) | |
| row 2 col 2 | 對象池 | 實例化并維護(hù)一組相同類型的對象實例 | |
| Singleton | 單例 | 將類型的實例化限制為一個對象 | |
| 結(jié)構(gòu)模式 | Adapter | 適配器 | 適配另一個不兼容的接口來一起工作 |
| Bridge | 橋接 | 將接口與其實現(xiàn)分離,以便兩者可以獨立變化 | |
| Composite | 組合 | 封裝并提供對許多不同對象的訪問 | |
| Decorator | 裝飾 | 靜態(tài)或動態(tài)地向?qū)ο筇砑有袨?/td> | |
| Facade | 外觀 | 使用一種類型作為許多其他類型的API | |
| Flyweight | 享元 | 運用共享技術(shù)有效地支持大量細(xì)粒度的對象 | |
| Proxy | 代理 | 為對象提供代理以控制其操作 | |
| 行為模式 | Chain of Responsibility | 職責(zé)鏈 | 避免通過提供超過對象處理請求的機會來將發(fā)送方與接收方耦合 |
| Command | 命令 | 捆綁命令和參數(shù)以便稍后調(diào)用 | |
| Mediator | 中介者 | 連接對象并充當(dāng)代理 | |
| Memento | 備忘錄 | 生成可用于返回先前狀態(tài)的不透明令牌 | |
| Observer | 觀察者 | 提供回調(diào)以通知事件/數(shù)據(jù)更改 | |
| Registry | 注冊 | 跟蹤給定類的所有子類 | |
| State | 狀態(tài) | 根據(jù)內(nèi)部狀態(tài)封裝同一對象的不同行為 | |
| Strategy | 策略 | 允許在運行時選擇算法的行為 | |
| Template | 模板 | 定義一個將某些方法推遲到子類的框架類 | |
| Visitor | 訪問者 | 將算法與其運行的對象分開 | |
| 同步模式 | Condition Variable | 條件變量 | 為線程提供一種機制,以暫時放棄訪問以等待某些條件 |
| Lock/Mutex | 鎖定/互斥 | 對資源實施互斥限制以獲得獨占訪問權(quán)限 | |
| Monitor | 監(jiān)視器 | 互斥和條件變量模式的組合 | |
| Read-Write Lock | 讀寫鎖定 | 允許并行讀取訪問,但僅對資源的寫入操作進(jìn)行獨占訪問 | |
| Semaphore | 信號 | 允許控制對公共資源的訪問 | |
| 并行模式 | N-Barrier | N-二道閘 | 阻止進(jìn)程繼續(xù)進(jìn)行,直到所有N個進(jìn)程都到達(dá)屏障 |
| Bounded Parallelism | 有界并行 | 完成大量資源限制的獨立任務(wù) | |
| Broadcast | 廣播 | 把一個消息同時傳輸?shù)剿薪邮斩?/td> | |
| Coroutines | 協(xié)同程序 | 允許在特定地方暫停和繼續(xù)執(zhí)行的子程序 | |
| Generators | 生成器 | 一次性生成一系列值 | |
| Reactor | 反應(yīng) | 服務(wù)處理程序使用I/O多路復(fù)用策略來同步、有序的處理一個或多個客戶端并發(fā)請求 | |
| Parallelism | 并行 | 完成大量獨立任務(wù) | |
| Producer Consumer | 生產(chǎn)者消費者 | 從任務(wù)執(zhí)行中分離任務(wù) | |
| Scheduler | 調(diào)度器 | 協(xié)調(diào)任務(wù)步驟 | |
| 消息傳遞模式 | Fan-In | 扇入 | 該模塊直接調(diào)用上級模塊的個數(shù),像漏斗型一樣去工作 |
| Fan-Out | 扇出 | 該模塊直接調(diào)用的下級模塊的個數(shù) | |
| Futures & Promises | Futures & Promises | 扮演一個占位角色,對未知的結(jié)果用于同步 | |
| Publish/Subscribe | Publish/Subscribe | 將信息傳遞給訂閱者 | |
| Push & Pull | Push & Pull | 把一個管道上的消息分發(fā)給多人 | |
| 穩(wěn)定模式 | Bulkheads | Bulkheads | 實施故障遏制原則(即防止級聯(lián)故障) |
| Circuit-Breaker | 斷路器 | 當(dāng)請求有可能失敗時,停止流動的請求 | |
| Deadline | 截止日期 | 一旦響應(yīng)變緩,允許客戶端停止一個正在等待的響應(yīng) | |
| Fail-Fast機制 | 快速失敗 | 檢查請求開始時所需資源的可用性,如果不滿足要求則失敗 | |
| Handshaking | 握手 | 詢問組件是否可以承受更多負(fù)載,如果不能,則請求被拒絕 | |
| Steady-State | 穩(wěn)定狀態(tài) | 為每一個服務(wù)積累一個資源,其它服務(wù)必須回收這些資源 | |
| 剖析模式 | Timing Functions | 時序功能 | 包裝函數(shù)并記錄執(zhí)行 |
| 成例 | Functional Options | 功能選項 | 允許給默認(rèn)值創(chuàng)建clean API和慣用重載 |
| 反模式 | 級聯(lián)故障 | 級聯(lián)故障 | 互連部件系統(tǒng)中的故障,其中部件的故障導(dǎo)致多米諾骨牌效應(yīng) |
參考資料:
Go語言設(shè)計模式
https://www.cnblogs.com/Survivalist/p/11207789.html
超贊的Go語言設(shè)計模式錦集
https://studygolang.com/articles/8230Golang語言情懷
ID:wwwGolangLtd
?www.Golang.Ltd
游戲服務(wù)器架構(gòu)丨分布式技術(shù)丨大數(shù)據(jù)丨Go語言學(xué)習(xí)
總結(jié)
以上是生活随笔為你收集整理的语言与golang语言运行速度_Golang语言情怀第13期 Go 语言设计模式 介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阵列matlab程序,阵列信号处理的理论
- 下一篇: git日志 每天导出 shell脚本