Design Pattern-類型有哪些 === # 前言 * 此技術文件及超連結記錄著Udemy上Dmitri Nesteruk的Design Patterns in Modern C++的一些學習筆記,並試著給出一些基本範例。 * 程式基本範例我通常盡量會想一些比較通俗的例子好理解,如果一時之間想不到會借助一下ChatGPT # 介紹 * 針對程式語言中常出現的問題所提出的解決方法,名詞術語由Erich Gamma等人在1990年代從建築設計領域引入到電腦科學的。通常有以下三中類型 * Creational Pattern 創建型模式 * 用於描述如何建立物件 * Structural Pattern 結構型模式 * 描述了在保持原結構的彈性和效能下,如何將類別或物件透過複合(composition)、繼承(inheritance)的方式,建構出更大更複雜的架構。 * Behavioral Pattern 行為型模式 * 描述物或類別之間的使用,例如管理物件、物件間的協作 # Creational Pattern 創建型模式 | Pattern Name |應用 |舉例 | -------------------------------------------------- |-------------------------------|-------------------------- |[Builder](https://hackmd.io/5CFWptesRdGVVs8IP_tVyw) |創建物件且簡化參數介面 | I15,I15 Pro, I15Plus規格設定 |[Factory](https://hackmd.io/HLmgbI0XQ7KQT9yc7Ydl8g) |創建特定規格的物件 | 特定形狀的肉品製作 |[Prototype](https://hackmd.io/9KOgUsCuRFSuOSq-c5Ql2A)|創建新物件時直接複製以創造的物件內容 | new一個車的class並複製後再做修改 |[Singleton](https://hackmd.io/EwmEZoSzR3WwB6w6FS0Edg)|實體化的類別在程式中唯一的時候 | 資料庫,實體化性能開銷較大的class # Structural Pattern 結構型模式 | Pattern Name | 應用 |舉例 | ----------------------------------------------------|-----------------------------------|----------------- |[Adapter](https://hackmd.io/h2Eojn2CQHewD4TN1vcHpA) |不同類別需轉換數據或方法時 |匯率轉換、電壓 |[Bridge](https://hackmd.io/mBaKePEeRVm4uBvpCAFpSw) |降低繼承及區分對內對外的實作細節 |電腦或手機使用特定OS |[Composite](https://hackmd.io/mfNd_AlKSSmZshnPySI8DA)|用來處理樹狀結構的資料 |資料夾、書本目錄子章節、Tree的leave跟node |[Decorator](https://hackmd.io/ccDhxD1PTT2-qErJWGGhLg)|為物件添加額外屬性 |奶茶添加珍珠、布丁 |[Facade](https://hackmd.io/HfZYieYHQhqs8Hb7ASqd6Q) |用於簡化對外的API窗口|一鍵設置功能 |[Flyweight](https://hackmd.io/KbQ4hA1ESCqycCGW3vIjDA)|盡量減少相同物件的建立以減少記憶體開銷 |遊戲腳色開發 |[Proxy](https://hackmd.io/Z51-5CLSSC2YHQbz814ebg) |將原方法做轉介 |電視盒轉介電視頻道的影片、請人代購 # Behavioral Pattern 行為型模式 | Pattern Name | 應用 |舉例 | ------------------------------------------------------------------| ----------------------|------------- |[Observer](https://hackmd.io/_onm1d7QQqyFraDGD2TAEA) | 一對多的狀態或資訊更新 |youtube影片更新 |[State](https://hackmd.io/CtALz-G2Q8Wz7ufqAm6xMA) | 狀態切換即執行動作 |遊戲腳色狀態變化 |[Strategy](https://hackmd.io/eVZBB2TASl60xo3RB1wntA) | 透過物件的選取來決定應對方式|付錢(現金,信用卡,QR code) |[Chain of Responsibility](https://hackmd.io/qgCyRM4FTJ-HRX-znavXXw)| 多個對象處理一個請求 |登機手續、學校畢業手續 |[Command](https://hackmd.io/YQPd9H-VTYeaiq4AILsf4Q) | 維護及執行一系列的請求 |遙控器控制設備 |[Interpreter](https://hackmd.io/UaZtBTb1QV6uqFdofPyZuQ?both) | 語法規則建立 |四則運算 |[Iterator](https://hackmd.io/w0om4D4lRXKNwyIJpToRBw) | 訪問及操作特定資料結構 |遍歷tree、list、vector... |[Mediator](https://hackmd.io/fJxW3_6PSpmJf_7Of8nCcA?both) | 減少相同類別的依賴關係 |聊天室、塔台 |[Memento](https://hackmd.io/rG1Gj7QZQGy5WoMysbw1ow) | 用來記錄之前的狀態且可回復 |遊戲進度儲存及讀取 |[Template](https://hackmd.io/RoHpS19_RG6Pgq1-9bNL3w) | 透過繼承來擴展方法 |食譜順序 |[Visitor](https://hackmd.io/fYIzKW_kRMKsJKfBi1aPQQ) | 數據結構穩定的情況下訪問不同元素| 程式訪問不同形狀類別並互叫現在是什麼形狀、訪可來學校遇到不同人 github : https://github.com/GU-Lin/Design_Pattern_Practice source : https://ithelp.ithome.com.tw/articles/10320610?sc=rss.iron ###### tags : `Catalog` `DesignPattern`