九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C#設(shè)計模式學(xué)習(xí)筆記:設(shè)計原則

    本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/8287784.html,記錄一下學(xué)習(xí)過程以備后續(xù)查用。

    寫代碼也是有原則的,我們之所以使用設(shè)計模式,主要是為了適應(yīng)變化,提高代碼復(fù)用率,使軟件更具有可維護性和可擴展性。如果我們能更好的理

解這些設(shè)計原則,對我們理解面向?qū)ο蟮脑O(shè)計模式也是有幫助的,因為這些模式的產(chǎn)生是基于這些原則的。

    

    設(shè)計原則包括:單一職責(zé)原則(SRP)、開閉原則(OCP)、里氏替換原則(LSP)、依賴倒置原則(DIP)、接口隔離原則(ISP)、合成復(fù)用原

則(CRP)、迪米特法則(LoD)。

    下面我們就分別介紹這七種設(shè)計原則:

    一、單一職責(zé)原則(SRP)

    1)SRP(Single Responsibilities Principle)的定義:就一個類而言,應(yīng)該僅有一個引起它變化的原因。簡而言之,就是功能要單一。

    2)如果一個類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在一起,一個職責(zé)的變化可能會削弱或者抑制這個類完成其它職責(zé)的能力。這種耦合會導(dǎo)致

脆弱的設(shè)計,當(dāng)變化發(fā)生時,設(shè)計會遭受到意想不到的破壞。(敏捷軟件開發(fā))

    3)軟件設(shè)計真正要做的許多內(nèi)容,就是發(fā)現(xiàn)職責(zé)并把那些職責(zé)相互分離。

    小結(jié):單一職責(zé)原則(SRP)可以看做是低耦合、高內(nèi)聚在面向?qū)ο笤瓌t上的引申,將職責(zé)定義為引起變化的原因,以提高內(nèi)聚性來減少引起變化的

原因。責(zé)任過多,引起它變化的原因就越多,這樣就會導(dǎo)致職責(zé)依賴,大大損傷其內(nèi)聚性和耦合度。

    二、開閉原則(OCP)

    1)OCP(Open-Close Principle)的定義:就是說軟件實體(類、方法等等)應(yīng)該可以擴展(擴展可以理解為增加),但是不能在原來的方法或者類上修

改,也可以這樣說,對增加代碼開放,對修改代碼關(guān)閉。

    2)OCP的兩個特征: 對于擴展(增加)是開放的,因為它不影響原來的,這是新增加的。對于修改是封閉的,如果總是修改,邏輯會越來越復(fù)雜。

    小結(jié):開閉原則(OCP)是面向?qū)ο笤O(shè)計的核心思想。遵循這個原則可以為我們面向?qū)ο蟮脑O(shè)計帶來巨大的好處:可維護(維護成本小、做管理簡

單、影響最?。⒖蓴U展(有新需求,增加就好)、可復(fù)用(不耦合,可以使用以前代碼)、靈活性好(維護方便、簡單)。開發(fā)人員應(yīng)該僅對程序中

出現(xiàn)頻繁變化的那些部分做出抽象(但是不能過激,對應(yīng)用程序中的每個部分都刻意地進行抽象同樣也不是一個好主意,拒絕不成熟的抽象和抽象本身

一樣重要)。

    三、里氏替換原則(LSP)

    1)LSP(Liskov Substitution Principle)的定義:子類型必須能夠替換掉它們的父類型。更直白的說,LSP是實現(xiàn)面向接口編程的基礎(chǔ)。

    小結(jié):任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn),所以我們可以實現(xiàn)面向接口編程。 LSP是繼承復(fù)用的基石,只有當(dāng)子類可以替換掉基類,軟件

的功能不受到影響時,基類才能真正被復(fù)用,而子類也能夠在基類的基礎(chǔ)上增加新的行為。里氏代換原則是對開閉原則的補充,實現(xiàn)開閉原則的關(guān)鍵步

驟就是抽象化,而基類與子類的繼承關(guān)系就是抽象化的具體實現(xiàn),所以里氏代換原則是對實現(xiàn)抽象化的具體步驟的規(guī)范。

    里氏替換原則的經(jīng)典反例:正方形不是長方形、玩具槍不能殺人、鴕鳥不會飛。

    四、依賴倒置原則(DIP)

    1)DIP(Dependence Inversion Principle)的定義:抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。簡單說就是,我們要針對接口編程,而不要針對實現(xiàn)

編程。

    2)高層模塊不應(yīng)該依賴低層模塊,兩個都應(yīng)該依賴抽象,因為抽象是穩(wěn)定的。抽象不應(yīng)該依賴具體(細(xì)節(jié)),具體(細(xì)節(jié))應(yīng)該依賴抽象。

    小結(jié):依賴倒置原則其實可以說是面向?qū)ο笤O(shè)計的標(biāo)志,如果在我們編碼的時候考慮的是面向接口編程,而不是簡單的功能實現(xiàn),體現(xiàn)了抽象的穩(wěn)定

性,只有這樣才符合面向?qū)ο蟮脑O(shè)計。

    五、接口隔離原則(ISP)

    1)接口隔離原則(Interface Segregation Principle, ISP)指的是使用多個專門的接口比使用單一的總接口要好。也就是說不要讓一個單一的接口承擔(dān)

過多的職責(zé),而應(yīng)把每個職責(zé)分離到多個專門的接口中,進行接口分離,過于臃腫的接口是對接口的一種污染。

    2)使用多個專門的接口比使用單一的總接口要好。

    3)一個類對另外一個類的依賴性應(yīng)當(dāng)是建立在最小的接口上的。

    4)一個接口代表一個角色,不應(yīng)當(dāng)將不同的角色都交給一個接口。沒有關(guān)系的接口合并在一起,形成一個臃腫的大接口,這是對角色和接口的污染。

    5)“不應(yīng)該強迫客戶依賴于它們不用的方法。接口屬于客戶,不屬于它所在的類層次結(jié)構(gòu)?!边@個說得很明白了,再通俗點說,不要強迫客戶使用它們

不用的方法,如果強迫用戶使用它們不使用的方法,那么這些客戶就會面臨由于這些不使用的方法的改變所帶來的改變。

    小結(jié):接口隔離原則(ISP)告訴我們,在做接口設(shè)計的時候,要盡量設(shè)計的接口功能單一,功能單一,使它變化的因素就少,這樣就更穩(wěn)定。其實這

體現(xiàn)了高內(nèi)聚、低耦合的原則,這樣做也避免接口的污染。

    六、合成復(fù)用原則(CRP)

    1)組合復(fù)用原則(Composite Reuse Principle, CRP)就是在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分,新對象通過向這些

對象的委派達到復(fù)用已用功能的目的。簡單地說,就是要盡量使用合成/聚合,盡量不要使用繼承。

    2)要使用好組合復(fù)用原則,首先需要區(qū)分”Has--A”和“Is--A”的關(guān)系。“Is--A”是指一個類是另一個類的“一種”,是屬于的關(guān)系,而“Has--A”則不同,它表

示某一個角色具有某一項責(zé)任。導(dǎo)致錯誤的使用繼承而不是聚合的常見的原因是錯誤地把“Has--A”當(dāng)成“Is--A”。例如:雞是動物,這就是“Is-A”的表現(xiàn),

某人有一支手槍,People類型里面包含一個Gun類型,這就是“Has-A”的表現(xiàn)。

    小結(jié):合成復(fù)用原則可以使系統(tǒng)更加靈活,類與類之間的耦合度降低,一個類的變化對其他類造成的影響相對較少,因此一般首選使用合成來實現(xiàn)復(fù)

用;其次才考慮繼承,在使用繼承時,需要嚴(yán)格遵循里氏替換原則,有效使用繼承會有助于對問題的理解,降低復(fù)雜度,而濫用繼承反而會增加系統(tǒng)構(gòu)

建和維護的難度以及系統(tǒng)的復(fù)雜度,因此需要慎重使用繼承復(fù)用。

    七、迪米特法則(Law of Demeter)

    1)迪米特法則(Law of Demeter,LoD)又叫最少知識原則(Least Knowledge Principle,LKP),指的是一個對象應(yīng)當(dāng)對其他對象有盡可能少的了

解。也就是說,一個模塊或?qū)ο髴?yīng)盡量少的與其他實體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨立,這樣當(dāng)一個模塊修改時,影響的模塊就會越少,

擴展起來更加容易。

    2)關(guān)于迪米特法則其他的一些表述有:只與你直接的朋友們通信,不要跟“陌生人”說話。

    3)外觀模式(Facade Pattern)和中介者模式(Mediator Pattern)就使用了迪米特法則。

    小結(jié):迪米特法則的初衷是降低類之間的耦合,實現(xiàn)類型之間的高內(nèi)聚、低耦合,這樣可以解耦。但是凡事都有度,過分的使用迪米特原則,會產(chǎn)生

大量這樣的中介和傳遞類,導(dǎo)致系統(tǒng)復(fù)雜度變大。所以在采用迪米特法則時要反復(fù)權(quán)衡,既做到結(jié)構(gòu)清晰,又要高內(nèi)聚低耦合。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
設(shè)計模式
淺談 SOLID 原則的具體使用
設(shè)計六大原則總結(jié)
面向?qū)ο笤O(shè)計模式5大基本原則
Java 設(shè)計模式 終結(jié)篇 OOP三大特征 OOD七項原則 設(shè)計模式十
設(shè)計模式原則
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服