GO語言設計模式

Go語言從面世就受到了業界的普遍關注,曾有文章分析,Go是最有可能改變未來IT技術的十大語言之一。本文作者列舉了Go語言的設計模式和成例合集,並且還進行了詳細的分類。

GO語言設計模式

創建型模式

  • 抽象工廠模式:提供一個接口用於創建相關對象的家族;
  • Builder模式:使用簡單的對象來構建複雜的對象;
  • 工廠方法模式:一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中;
  • 對象池模式:實例化並維護一組相同類型的對象實例;
  • 單例模式:限制類的實例,保證一個類只有一個實例。

結構模式

  • 適配器模式:適配另一個不兼容的接口來一起工作;
  • 橋接模式:將抽象化(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和慣用重載;

反模式

  • 級聯故障:一個系統的某部分出現錯誤,與之有關的上下級也隨之出現故障,導致多米諾效應。

更多內容請關注每日編程,每天進步一點。


分享到:


相關文章: