設計模式總結

来源: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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...