這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
來自:http://geek.csdn.net/news/detail/100051
Go語言從面世就受到了業界的普遍關注,曾有文章分析,Go是最有可能改變未來IT技術的十大語言之一。本文作者列舉了Go語言的設計模式和成例合集,並且還進行了詳細的分類。
建立型模式
- 抽象原廠模式:提供一個介面用於建立相關對象的家族;
- Builder模式:使用簡單的對象來構建複雜的對象;
- Factory 方法模式:一個建立產品對象的工廠介面,將實際建立工作延遲到子類當中;
- 對象池模式:執行個體化並維護一組相同類型的對象執行個體;
- 單例模式:限制類的執行個體,保證一個類只有一個執行個體。
結構模式
- 適配器模式:適配另一個不相容的介面來一起工作;
- 橋接模式:將抽象化(Abstraction)與實現化(Implementation)脫耦,使得二者可以獨立地變化;
- 合成模式:將對象組織到樹中,用來描述樹的關係;
- 裝飾模式:給一個靜態或動態對象添加行為;
- 門面(Facade)模式:為子系統中的各類(或結構與方法)提供一個簡明一致的介面,隱藏子系統的複雜性,使子系統更加容易使用;
- Flyweight模式:運用共用技術有效地支援大量細粒度的對象;
- MVC模式:是模型(model)-視圖(view)-控制器(controller)的縮寫,將一個應用程式劃分成三個相互關聯的部分,用一種商務邏輯、資料、介面顯示分離的方法組織代碼,將商務邏輯聚集到一個組件裡,在改進和個人化定製介面及使用者互動的同時,不需要重新編寫商務邏輯。
- 代理模式:為其他對象提供一種代理以控制對這個對象的訪問。
行為模式
- 責任鏈模式:使多個對象都有機會處理請求,從而避免請求的寄件者和接收者之間的耦合關係;
- 命令模式:就是用戶端發布一個命令(也就是“請求”),而這個命令已經被封裝成一個對象。即這個命令對象的內部可能已經指定了該命令具體由誰負責執行;
- 中介(Mediator)模式:用一個中介對象來封裝一系列關於對象互動行為;
- 觀察者模式:對象間的一種一對多的依賴關係,以便一個對象的狀態發生變化時,所有依賴於它的對象都得到通知並自動重新整理;
- 註冊(Registry)模式:跟蹤給定類的所有子類;
- 狀態模式:基於一個對象的內部狀態,給相同對象提供多種行為;
- 策略模式:定義一系列演算法,並將每一個演算法封裝起來,而且使它們可以相互替換;
- 模板(Template)模式:定義一個操作中演算法的架構,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟;
- 訪問者模式:表示一個作用於某對象結構中的各元素的操作,它使開發人員可以在不改變各元素類的前提下定義作用於這些元素的新操作。
同步模式
- 條件變數:利用線程間共用的全域變數進行同步的一種機制,主要包括兩個動作:一個線程等待”條件變數的條件成立”而掛起;另一個線程使”條件成立”(給出條件成立訊號);
- Lock/Mutex:執行互斥限制資源獲得獨佔訪問;
- 監視器模式:互斥鎖和條件變數的組合模式;
- 讀寫鎖定模式:它把對共用資源的訪問者劃分成讀者和寫者,讀者只對共用資源進行讀訪問,寫者則需要對共用資源進行寫操作;
- Semaphore:負責協調各個線程,以保證它們能夠正確、合理地使用公用資源。
並行模式
- Bounded Parallelism:完成大量資源限制的獨立任務;
- 廣播(Broadcast):把一個訊息同時傳輸到所有接收端;
- 協同(Coroutines):允許在特定地方暫停和繼續執行的子程式;
- 產生器:一次性產生一系列值;
- Reactor模式:在事件驅動的應用中,將一個或多個客戶的服務要求分離(demultiplex)和調度(dispatch)給應用程式。同步、有序地處理同時接收的多個服務要求。
- 並行(Parallelism):完成大量的獨立任務;
- 生產者消費者:從任務執行中分離任務;
- 調度器(Scheduler):協調任務步驟。
訊息傳遞模式
- 扇入(Fan-In):該模組直接調用上級模組的個數,像漏鬥型一樣去工作;
- 扇出(Fan-Out):該模組直接調用的下級模組的個數;
- Futures & Promises:扮演一個佔位角色,對未知的結果用於同步;
- Publish/Subscribe:將資訊傳遞給訂閱者;
- Push & Pull:把一個管道上的訊息分發給多人。
穩定模式
- Bulkheads:實施故障遏制原則,例如防止級聯故障;
- 斷路器(Circuit-Breaker)模式:當請求有可能失敗時,停止流動的請求;
- 到期日(Deadline):一旦響應變緩,允許用戶端停止一個正在等待的響應;
- Fail-Fast機制:集合的一種錯誤偵測機制。當多個線程對集合進行結構上的改變操作時,有可能會產生fail-fast機制;
- Handshaking:如果一個組件的不能訪問請求被拒絕,詢問是否還能承擔更多負載;
- 穩定點(Steady-State):為每一個服務積累一個資源,其它服務必須回收這些資源;
剖析模式
- Timing Functions:封裝和執行日誌的函數;
成例
- Functional Options:允許給預設值建立clean API和慣用重載;
反模式
- 級聯故障:一個系統的某部分出現錯誤,與之有關的上下級也隨之出現故障,導致多米諾效應。