設計模式總結

来源:http://www.cnblogs.com/Codenewbie/archive/2016/12/17/6192599.html
-Advertisement-
Play Games

本文轉載自 http://www.mynawang.com/ 相關代碼可訪問 https://github.com/mynawang/Design-Pattern-Learning 什麼是設計模式 設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的 ...


本文轉載自

http://www.mynawang.com/

相關代碼可訪問

https://github.com/mynawang/Design-Pattern-Learning

 

什麼是設計模式

設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。  

設計模式的6個原則

1、迪米特法原則(Demeter Principle) 迪米特法原則又稱為最少知道原則,也就是說,一個實體應當儘量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。也就是我們平常所說的”高內聚,低耦合”。 2、單一職責原則(Single Responsibility Principle) 就一個類而言,應該僅有一個引起它變化的原因。簡而言之,就是功能要單一,一個類只負責一項職責。 3、介面隔離原則(Interface Segregation Principle) 使用多個專門的介面,而不使用單一的總介面,即客戶端不應該依賴那些它不需要的介面。 4、里氏替換原則(Liskov Substitution Principle) 所有引用基類(父類)的地方必須能透明地使用其子類的對象。即繼承於派生的規則。 5、依賴倒置原則(Dependence Inversion Principle) 高層模塊不應該依賴低層模塊,二者都應該依賴其抽象;抽象不應該依賴於細節,細節應當依賴於抽象。換言之,要針對介面編程,而不是針對實現編程。 6、開閉原則(Open-Closed Principle) 一個軟體實體如類、模塊和函數應該對擴展開放,對修改關閉。即軟體實體應儘量在不修改原有代碼的情況下進行擴展。  

設計模式分類

創建型模式
1、抽象工廠模式(Abstract Factory Pattern) 提供一個介面, 用於創建相關或依賴對象的家族, 而不需要指定具體類。 2、工廠方法模式(Factory Method Pattern) 定義了一個創建對象的介面,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。 3、建造者模式(Builder Pattern) 將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 4、單例模式(Singleton Pattern) 確保一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。 5、原型模式(Prototype Pattern) 用原型實例指定創建對象的種類,並通過拷貝這些原型創建新的對象。
結構型模式
1、適配器模式(Adapter Pattern) 是作為兩個不相容的介面之間的橋梁。它結合了兩個獨立介面的功能。 2、裝飾器模式(Decorator Pattern) 允許向一個現有的對象添加新的功能,同時又不改變其結構。它是作為現有的類的一個包裝。 3、代理模式(Proxy Pattern) 一個類代表另一個類的功能。創建具有現有對象的對象,以便向外界提供功能介面。 4、橋接模式(Bridge Pattern) 用於把抽象化與實現化解耦,使得二者可以獨立變化。通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。 5、外觀模式(Facade Pattern) 隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。向現有的系統添加一個介面,來隱藏系統的複雜性。 6、享元模式(Flyweight Pattern) 主要用於減少創建對象的數量,以減少記憶體占用和提高性能。通過共用技術實現相同或相似對象的重用。 7、組合模式(Composite Pattern) 又叫部分-整體模式,是用於把一組相似的對象當作一個單一的對象。將對象組織到樹結構中,可以用來描述整體與部分的關係。
行為型模式
1、模板方法模式(Template Method Pattern) 一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。 2、備忘錄模式(Memento Pattern) 保存一個對象的某個狀態,以便在適當的時候恢復對象。 3、迭代子模式(Iterator Pattern) 用於順序訪問集合對象的元素,不需要知道集合對象的底層表示。 4、訪問者模式(Visitor Pattern) 表示一個作用於某對象結構中的各元素的操作,它使我們可以在不改變各元素的類的前提下定義作用於這些元素的新操作。 5、觀察者模式(Observer Pattern) 定義對象間的一種一對多依賴關係,使得每當一個對象狀態發生改變時,其相關依賴對象皆得到通知並被自動更新。 6、解釋器模式(Interpreter Pattern) 定義語言的文法,並且建立一個解釋器來解釋該語言中的句子,這裡的“語言”意思是使用規定格式和語法的代碼。 7、中介者模式(Mediator Pattern) 用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。中介者模式又稱為調停者模式。 8、責任鏈模式(Chain of Responsibility Pattern) 避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿著這條鏈傳遞請求,直到有對象處理它為止。 9、策略模式(Strategy Pattern) 定義一系列演算法,將每一個演算法封裝起來,並讓它們可以相互替換。策略模式讓演算法獨立於使用它的客戶而變化。 10、命令模式(Command Pattern) 將一個請求封裝為一個對象,從而使我們可用不同的請求對客戶進行參數化;對請求排隊或者記錄請求日誌,以及支持可撤銷的操作。 11、狀態模式(State Pattern) 允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了它的類。         博主自白

    本人20有餘,天資愚鈍,深信勤能補拙。酷愛編程,愛鑽研,廣交碼友,耕於三線,日以繼夜而使飛燕之身蛻變為大腹便便。


有志之士點擊鏈接加入技術交流群【專註的程式猿】282087535


    文章如果對你有所幫助是我的榮幸,不妥之處希望指正,轉帖請註明本文出自鈺火的小棧(http://www.mynawang.com/),請尊重他人的辛勤勞動成果,謝謝!


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

-Advertisement-
Play Games
更多相關文章
  • 上一篇文章網站實現微信登錄之嵌入二維碼中描述瞭如何在自己的登錄頁面內嵌入登錄二維碼,今天的這篇文章主要是描述下在掃碼成功之後微信重定向回網站後登錄邏輯的處理,其實也就是驗證身份信息,授權用戶登錄的邏輯。這裡說句題外話,寫博客複習已經做過的項目真的有助於自己對已經寫過代碼和業務邏輯的理解,說不定還有意 ...
  • 1.node-formidable 對文件上傳提供幫助的組件 2.app.js ...
  • <filter>: 過濾器,執行一個過濾器會有返回個枚舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日誌將立即被拋棄不再經過其他過濾器;返回NEUTRAL,有序列表裡的下個過濾器過接著處理日誌;返回ACCEPT,日誌會被立即處理,不再經過剩餘過濾器。 過濾器被添加到<Appe ...
  • 1.假設我們要輸出張三,李四兩個人的基本信息,包括姓名,年齡,可以用以下的C程式實現: eg: 2.假設要輸出很多人的信息,那麼用上面這樣的程式思路實現起來很不方便,可以用數組來實現: eg: 3.假設基本信息的屬性有很多個,還有工作,婚姻狀況等等的屬性,按上面的程式思想,我們就得增加很多用於保存屬 ...
  • 微盤系統,微盤搭建,微盤源碼,微交易系統搭建,微交易源碼,微交易系統, 本公司微交易系統,是基於微信端開發的交易平臺。平臺適用於貴金屬、外匯、原油、期貨…等多個交易品種的投資者,並對接多個移動支付介面,輕鬆解決出入金問題。程式說明:2017新版微交易系統建設,採用新浪數據介面,非常穩定,直接運營版本 ...
  • 閱讀目錄 架構的定義 如何開始設計一個架構 一個好架構的特點 做架構中的誤區 結語 一、架構的定義 所謂一千個架構師中有一千種“最好的架構”模式。 “架構”是我們這行業種一個很常見的詞,表明其必然也是經歷了很長的歲月打磨所形成的一個詞。架構的這個詞出現的意義是什麼?為瞭解決什麼問題?只有把這2個問題 ...
  • 引子 前幾天看到微信後臺團隊分享了TLS相關文章,正好gRPC里TLS數據加密是很重要的一塊,於是整理出了這篇文章。 在gRPC里,如果僅僅是用來做後端微服務,可以考慮不加密。本文太長,先給個大綱。 1. HTTPS,HTTP/2介紹 2. TLS加密原理、實現庫 3. HTTP/2協議協商機制 4 ...
  • 一、Angular特點: 1、雙向數據綁定,主打賣點 2、MVVM 模型,把視圖和邏輯分開 3、依賴註入 個人感覺,在Angular中,視圖對應 HTML 模板,視圖邏輯對應directive 和 controller。 二、模塊 Angular 中通過模塊來管理命名空間,可以通過不同的模塊來隔離不 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...