Refresh design pattern

来源:https://www.cnblogs.com/mengdd/archive/2019/09/30/refresh-design-pattern.html
-Advertisement-
Play Games

多年後, 再次翻閱設計模式書籍, 將每種模式的要點總結於此, 需要本身有一定設計模式基礎, 再結合要點, 幫助更好理解與運用. ...


多年後, 再次翻閱設計模式書籍, 將每種模式的要點總結於此, 需要本身有一定設計模式基礎, 再結合要點, 幫助更好理解與運用.

  • 策略模式 (Strategy)
    • 附加功能單獨抽象不同介面
    • 功能以組合方式引入抽象類
    • 抽象類封裝功能模塊各調用
    • 實現類可在構造中配置功能具體實現
  • 觀察者模式 (Observer)
    • 被訂閱者持有所有訂閱者
    • 數據更新可以直接推送
    • 數據更新也可以通知加拉取
    • 大程度解耦觀察者與被訂閱者
  • 裝飾器模式 (Decorator)
    • 裝飾器介面的簡單實現叫做組件
    • 持有組件對象的叫做裝飾器
    • 裝飾是從裡層的裝飾器開始
    • 最裡層的裝飾器會持有原始組件
    • 各層通過對持有的底層對象進行包裝完成所謂裝飾並返回給上層
    • 理論上可以做到一層套一層無窮盡
  • 工場方法模式 (Factory Method)
    • 解耦產品的實現與使用
    • 產品需要進行抽象
    • 工場方法定義創建產品的介面
    • 工場方法內還可以封裝使用過程
    • 子工場配置自己的創建邏輯
    • 工場方法常常與抽象工場結合
    • 抽象工場定義了一組產品的創建
    • 工廠方法的實現又用這些產品創建或組件具體的大產品
    • 工廠方法通過繼承來實現
    • 抽象工場通過組合來實現(傳入)
  • 單例模式 (Singleton)
    • 全局實例註意記憶體
    • 多線程需要特殊照顧
  • 命令模式 (Command)
    • 解耦發請求者與執行請求者
    • 命令內部可以直接執行也可以代理給被封裝在內的接收者
    • 命令支持撤銷
    • 巨集命令包含多個命令同時調用
  • 適配器模式 (Adapter)
    • 對象適配器以組合來實現
    • 類適配器以多繼承來實現
    • 新舊系統共用可雙向適配
  • 外觀模式 (Facade)
    • 從抽象層次看與適配器很像
    • 外觀模式創建新的簡單介面
    • 適配器模式使用已存在介面
    • 新介面包裝多個系統模塊簡化調用
    • 老介面包裝其他系統達到相容
  • 模板方法模式 (Template Method)
    • 模板實現演算法, 子類實現步驟
    • 子類與父類儘量不能成環
    • 好萊塢模式為子類全為回調方法
    • 有預設實現的為鉤子方法
    • 策略用組合封裝演算法,模板用繼承封裝演算法
    • 工廠方法是特殊的模板方法
  • 迭代器模式 (Iterator)
    • 解耦游走數組而不要關心具體類型
    • 集合類都有自己的迭代器
    • 一般的迭代器具備hasNext與next兩個方法
    • 聚合器持有數據並創建迭代器
  • 組合模式 (Composite)
    • 組合模式的節點分為子節點與葉節點
    • 子與葉都實現了同樣的組合介面,所謂透明性
    • 子節點會額外實現add與get
    • 為了葉節點安全也可以具有不同介面
    • 組合模式可以與迭代器共生
    • 迭代器需要配合棧來實現樹的遍歷
    • 子節點可以實現空迭代器來減少Null判斷
  • 狀態模式 (State)
    • 與策略模式類圖相似
    • 狀態介面定義狀態切換行為
    • 所有狀態實現統一介面
    • 狀態機定義並持有所有狀態
    • 狀態機儲存當前狀態
    • 狀態切換由不同狀態自己控制
    • 狀態內通過持有的狀態機來切換下一狀態
  • 代理模式 (Proxy)
    • 可分為遠程代理與虛擬代理
    • 與裝飾者很像
    • 代理更多的是控制真實對象的訪問, 解耦客戶與真實對象, 也可能幫助創建真實對象
    • 裝飾器更多是增加行為, 而且不創建對象
    • 可通過工廠方法返回主體的代理
    • 與適配器很像
    • 代理不改變介面, 適配器改變介面
    • 保護代理可以限制訪問部分介面,更像適配器
  • 複合模式 (Compound)
    • 多用幾種
    • 比如MVC就融合了策略,組合,適配器等

  • 一些冷門模式

  • 橋接模式 (Bridge)
    • 與策略模式很像
    • 主體都依賴於功能組件的抽象
    • 策略模式的主體是具體演算法的實現
    • 橋接模式的主更抽象,需要子類來實現不同演算法
    • 可以做到主體和功能組件解耦
    • 增加了複雜度
  • 生成器 (Builder)
    • 封裝複雜對象的創建過程
    • 隱藏內部實現
    • 創建時需要對所創對象有更多認識
  • 責任鏈 (Resposibility)
    • 簡單理解為一個Handler的對象鏈
    • 比如很多程式里常用的Dispatcher鏈
    • 或者很多系統啟動時需要載入的數據鏈
    • 不能保證一定會有對象對數據進行處理
  • 享元 (Flyweight)
    • 多個同樣的實例可被一個方法控制, 就可以封裝在一起輪詢數組進行處理
    • 但是不能有獨立不同行為了
  • 解釋器 (Interpreter)
    • 主要是做簡單固定語法解析
    • 抽象解釋介面, 並實現多個解釋器
    • 如And, Or之類的, 可相互嵌套.
    • 如果語法複雜, 種類繁多, 會不太適合
  • 中介者 (Mediator)
    • 解耦不同對象
    • 它們只需要通知中介者, 中介者根據不同狀態來控制整個邏輯
    • 可能會讓中介者邏輯過於複雜
  • 備忘錄 (Momento)
    • 將對象的儲存抽出來, 更好的維護了業務的內聚
    • 一般會提供儲存與獲取介面
    • 儲存過程可能會耗時
    • 可能需要考慮序列化
  • 原型 (Prototype)
    • 提供複製對象的方法
    • 比如clone
    • 如果對象層次深,複製起來可能複雜
  • 訪問者 (Visitor)
    • 解耦對象與每個對象的具體操作, 如對電腦的不同部件進行不同操作
    • 在對象種類變化小而操作變化大的時候使用
    • 每一個對象實現visitor介面, 接受(accept)一個visitor,並把自己傳給visitor (visit)
    • 缺點是具體元素對訪問者暴露, 而不是抽象介面

有很多種分類方式, 不必拘泥, 也可忽略.

  • 分類方式 I
    • 創建型
      • 單例
      • 抽象工廠
      • 工廠方法
      • 生成器
      • 原型
    • 行為型
      • 模板方法
      • 迭代器
      • 狀態
      • 策略
      • 觀察者
      • 命令
      • 解釋器
      • 中介者
      • 訪問者
      • 備忘錄
      • 責任鏈
    • 結構型
      • 裝飾器
      • 代理
      • 外觀
      • 組合
      • 適配器
      • 橋接
      • 享元
  • 分類方式 II
      • 模板方法
      • 工廠方法
      • 適配器
      • 解釋器
    • 對象
      • 單例
      • 抽象工廠
      • 裝飾器
      • 代理
      • 外觀
      • 組合
      • 適配器
      • 迭代器
      • 狀態
      • 策略
      • 觀察者
      • 命令
      • 橋接
      • 享元
      • 生成器
      • 中介者
      • 訪問者
      • 備忘錄
      • 責任鏈
      • 原型

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 智慧燈桿、三維智慧燈桿、3D燈桿、3D定位、三維室內定位、3d建築,3d消防,消防演習模擬,3d庫房,3d檔案室,3d密集架,webGL,threejs,3d機房,bim管理系統 ...
  • <!DOCTYPE html><html><style> *{padding: 0;margin: 0} #open{ width: 300px; height: 300px; background-color: brown; position: relative; border-radius:50 ...
  • 字體的分類: serif (襯線字體){在筆畫上面有些特殊的修飾效果} sans-serif (非襯線字體){橫平豎直.橫就是橫,點就是點} monospace ( 等寬字體) cursive ( 草書字體) fantasy (虛幻字體) 以上這些分類都是一些大的分類, 並沒有涉及具體的類型,如果將 ...
  • JS中數據類型轉換彙總 JS中的數據類型分為 【基本數據類型】 數字 number 字元串 string 布爾 boolean 空 null 未定義 undefined 【引用數據類型】 對象 object 普通對象 數組對象 (Array) 正則對象 (RegExp) 日期對象 (Date) 數學 ...
  • 1. 繼承 ES 中只支持實現繼承,而且其實現繼承主要依靠原型鏈來實現的。 2. 原型鏈 ES中 描述了 原型鏈的概念,並將原型鏈作為實現繼承的主要方法。其基本思想是利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。 回顧一下構造函數、原型和實例的關係 每個構造函數都有一個原型對象,原型對象都包 ...
  • JavaScript 不提供任何內建的列印或顯示函數。 JavaScript 顯示方案 JavaScript 能夠以不同方式“顯示”數據: 使用 window.alert() 寫入警告框 使用 document.write() 寫入 HTML 輸出 使用 innerHTML 寫入 HTML 元素 使 ...
  • 模板模式(Template): 提到模板,可能大多數人想到的是"簡歷模板"、"論文模板"等,比如我們要寫簡歷時,會從網上下載一份漂亮的簡歷模板,其格式是固定的,我們根據自己的情況填充不同的內容。模板模式定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可 ...
  • 事務一致性 首先,我們來回顧一下ACID原則: Atomicity:原子性,改變數據狀態要麼是一起完成,要麼一起失敗 Consistency:一致性,數據的狀態是完整一致的 Isolation:隔離線,即使有併發事務,互相之間也不影響 Durability:持久性, 一旦事務提交,不可撤銷 在單體應 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...