C#面向?qū)ο蟮?3種設(shè)計(jì)模式介紹
一、設(shè)計(jì)模式概述
設(shè)計(jì)模式,是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。
設(shè)計(jì)模式其實(shí)就是開(kāi)發(fā)過(guò)程中常見(jiàn)問(wèn)題的解決方案,是解決問(wèn)題的思路。學(xué)習(xí)設(shè)計(jì)模式能更優(yōu)雅的解決面向?qū)Τ绦蜷_(kāi)發(fā)設(shè)計(jì)問(wèn)題。
二、面向?qū)ο?3種設(shè)計(jì)模式
創(chuàng)建型模式
關(guān)注對(duì)象的創(chuàng)建
模式名稱 | 中文名稱 | 基本定義 |
---|---|---|
Singleton | 單例模式 | 保證一個(gè)類僅有一個(gè)實(shí)例,并且提供一個(gè)全局訪問(wèn)點(diǎn)。 |
Factory Method | 工廠方法模式 | 定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定將哪一個(gè)類實(shí)例化。工廠方法模式使一個(gè)類的實(shí)例化延遲到子類。 |
Abstract Factory | 抽象工廠 | 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定具體的類。 |
Builder | 建造者模式 | 講一個(gè)復(fù)雜對(duì)象的構(gòu)建和他的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示 |
Prototype | 原型模式 | 用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這個(gè)原型來(lái)創(chuàng)建新的對(duì)象。 |
結(jié)構(gòu)型模式
關(guān)注類與對(duì)象之間的組合
模式名稱 | 中文名稱 | 基本定義 |
---|---|---|
Adapter | 適配器模式 | 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口。適配器使得原來(lái)不兼容的接口可以一起工作。 |
Bridge | 橋接模式 | 將抽象部分與它的實(shí)現(xiàn)部分分離,使他們都可以獨(dú)立變化 |
Composite | 組合模式 | 將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。組合模式使得客戶對(duì)單個(gè)對(duì)象對(duì)單個(gè)對(duì)象和復(fù)合對(duì)象的使用具有一致性。 |
Decorator | 裝飾器模式 | 動(dòng)態(tài)的給一個(gè)對(duì)象添加一些額外的職責(zé)。就擴(kuò)展方式而言,裝飾器模式比生成子類的方式更靈活 |
Facade | 外觀模式 | 為子系統(tǒng)的一組接口提供一個(gè)一致的界面,F(xiàn)acade模式定義了一個(gè)高層的接口,這個(gè)接口使得這一個(gè)子系統(tǒng)更容易使用。 |
Flyweight | 享元模式 | 運(yùn)用共享技術(shù)有效的支持大量細(xì)粒度對(duì)象。 |
Proxy | 代理模式 | 為其他對(duì)象提供一個(gè)代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。 |
行為型模式
關(guān)注對(duì)象和行為的分離
模式名稱 | 中文名稱 | 基本定義 |
---|---|---|
Interpreter | 解釋器模式 | 給定一個(gè)語(yǔ)言,定義它的文法的一種表示,并定義一個(gè)解釋器,該解釋器使用該表示來(lái)解釋語(yǔ)言中的例子。 |
Template Method | 模板方法模式 | 定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟 |
Chain of Responsibility | 職責(zé)鏈模式 | 為解除請(qǐng)求的發(fā)送者和接收者之間的耦合,而使多個(gè)對(duì)象都有機(jī)會(huì)處理這個(gè)請(qǐng)求。講這些對(duì)象連著一個(gè)鏈,并沿著這條鏈傳遞該請(qǐng)求,直到一個(gè)對(duì)象處理它。 |
Command | 命令模式 | 將一個(gè)請(qǐng)求封裝成一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化,對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可取消操作。 |
Iterator | 迭代器模式 | 提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中的各個(gè)元素,而又不需要暴露該對(duì)象的內(nèi)部表示。 |
Mediator | 媒介模式 | 用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互。中介者使各對(duì)象不需要顯示的相互引用,從而使其耦合松散,而且可以獨(dú)立地改變他們之間的交互。 |
Memento | 備忘錄模式 | 在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在這個(gè)對(duì)象之外保存這個(gè)狀態(tài)。這樣就可以將這個(gè)對(duì)象恢復(fù)到保存的狀態(tài)。 |
Observer | 觀察者模式 | 定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,以便當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并自動(dòng)刷新。 |
State | 狀態(tài)模式 | 允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變他的行為。對(duì)象看起來(lái)似乎修改了他所屬的類。 |
Strategy | 策略模式 | 定義一系列算法,把它們一個(gè)個(gè)封裝起來(lái),并且使他們可相互替換,本模式使得算法的變化可獨(dú)立于他的客戶 |
Visitor | 訪問(wèn)者模式 | 表示一個(gè)作用于某對(duì)象結(jié)構(gòu)的各元素的操作。他使你可以在不改變?cè)氐念惖那疤嵯露x作用于這些元素的操作 |
三、設(shè)計(jì)模式六大原則詳細(xì)解析
- 單一職責(zé):一個(gè)類只負(fù)責(zé)一 項(xiàng)職責(zé)
- 里氏替換原則:子類可以擴(kuò)展父類的功能,但不能改變?cè)懈割惖墓δ堋1M量用子類替換父類
- 依賴倒置原則:抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴于抽象,面向接口編程
- 接口隔離原則:使用多個(gè)專門的接口,而不使用單一的總接口。即 客戶端不應(yīng)該依賴于那些它不需要的接口
- 迪米特原則:最少知道原則,盡量降低類與類之間的耦合;一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解
- 開(kāi)閉原則:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉,能擴(kuò)展不修改
四、源碼倉(cāng)庫(kù)
https://github.com/Run2948/CSharpDesignPatterns.git
到此這篇關(guān)于C#面向?qū)ο?3種設(shè)計(jì)模式介紹的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C# 使用Microsoft Edge WebView2的相關(guān)總結(jié)
這篇文章主要介紹了C# 使用Microsoft Edge WebView2的相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02c# HttpWebRequest通過(guò)代理服務(wù)器抓取網(wǎng)頁(yè)內(nèi)容應(yīng)用介紹
在C#項(xiàng)目開(kāi)發(fā)過(guò)程中可能會(huì)有些特殊的需求比如:用HttpWebRequest通過(guò)代理服務(wù)器驗(yàn)證后抓取網(wǎng)頁(yè)內(nèi)容,要想實(shí)現(xiàn)此方法并不容易,本文整理了一下,有需求的朋友可以參考下2012-11-11C#基礎(chǔ)知識(shí)之字符串和正則表達(dá)式
目前為止許多編程語(yǔ)言和工具都包含對(duì)正則表達(dá)式的支持,C#也不例外,下面這篇文章主要給大家介紹了關(guān)于C#基礎(chǔ)知識(shí)之字符串和正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下2022-10-10C#使用Post調(diào)用接口并傳遞json參數(shù)
這篇文章主要介紹了C#使用Post調(diào)用接口并傳遞json參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-06-06使用DateTime的ParseExact方法實(shí)現(xiàn)特殊日期時(shí)間的方法詳解
本篇文章是對(duì)使用DateTime的ParseExact方法實(shí)現(xiàn)特殊日期時(shí)間的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05c#后臺(tái)線程訪問(wèn)前臺(tái)控件并顯示信息示例
這篇文章主要介紹了c#后臺(tái)線程訪問(wèn)前臺(tái)控件并顯示信息示例,需要的朋友可以參考下2014-03-03