面向对象简单原则(转)
生活随笔
收集整理的這篇文章主要介紹了
面向对象简单原则(转)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、 "開放-封閉"原則(OCP)?
Open-Closed Principle原則講的是:一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。?
優(yōu)點(diǎn):?
? 通過擴(kuò)展已有軟件系統(tǒng),可以提供新的行為,以滿足對(duì)軟件的新的需求,使變化中的軟件有一定的適應(yīng)性和靈活性。?
? 已有軟件模塊,特別是最重要的抽象層模塊不能再修改,這使變化中的軟件系統(tǒng)有一定的穩(wěn)定性和延續(xù)性。?
二、 里氏代換原則(LSP)?
Liskov Substitution Principle(里氏代換原則):子類型(subtype)必須能夠替換它們的基類型。?
三、 依賴倒置原則(DIP)?
??
依賴倒置(Dependence Inversion Principle)原則講的是:要依賴于抽象,不要依賴于具體。?
簡(jiǎn)單的說,依賴倒置原則要求客戶端依賴于抽象耦合。原則表述:?
抽象不應(yīng)當(dāng)依賴于細(xì)節(jié);細(xì)節(jié)應(yīng)當(dāng)依賴于抽象;?
要針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)編程。?
?
使用傳統(tǒng)過程化程序設(shè)計(jì)所創(chuàng)建的依賴關(guān)系,策略依賴于細(xì)節(jié),這是糟糕的,因?yàn)椴呗允艿郊?xì)節(jié)改變的影響。依賴倒置原則使細(xì)節(jié)和策略都依賴于抽象,抽象的穩(wěn)定性決定了系統(tǒng)的穩(wěn)定性。?
四、 接口隔離原則(ISP)?
接口隔離原則(Interface Segregation Principle)講的是:使用多個(gè)專門的接口比使用單一的總接口總要好。換而言之,從一個(gè)客戶類的角度來講:一個(gè)類對(duì)另外一個(gè)類的依賴性應(yīng)當(dāng)是建立在最小接口上的。?
過于臃腫的接口是對(duì)接口的污染。不應(yīng)該強(qiáng)迫客戶依賴于它們不用的方法。?
實(shí)現(xiàn)方法:?
1、 使用委托分離接口?
2、 使用多重繼承分離接口?
五、 合成/聚合復(fù)用原則(CARP)?
合成/聚合復(fù)用原則(Composite/Aggregate Reuse Principle或CARP)經(jīng)常又叫做合成復(fù)用原則(Composite Reuse Principle或CRP),就是在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象,使之成為新對(duì)象的一部分;新對(duì)象通過向這些對(duì)象的委派達(dá)到復(fù)用已有功能的目的。?
簡(jiǎn)而言之,要盡量使用合成/聚合,盡量不要使用繼承。?
區(qū)分"Has-A"與"Is-A"?
"Is-A"是嚴(yán)格的分類學(xué)意義上定義,意思是一個(gè)類是另一個(gè)類的"一種"。而"Has-A"則不同,它表示某一個(gè)角色具有某一項(xiàng)責(zé)任。?
導(dǎo)致錯(cuò)誤的使用繼承而不是合成/聚合的一個(gè)常見的原因是錯(cuò)誤的把"Has-A"當(dāng)作"Is-A"。?
例如:?
?
實(shí)際上,雇員、經(jīng)理、學(xué)生描述的是一種角色,比如一個(gè)人是"經(jīng)理"必然是"雇員",另外一個(gè)人可能是"學(xué)生雇員",在上面的設(shè)計(jì)中,一個(gè)人無法同時(shí)擁有多個(gè)角色,是"雇員"就不能再是"學(xué)生"了,這顯然是不合理的。?
錯(cuò)誤源于把"角色"的等級(jí)結(jié)構(gòu)與"人"的等級(jí)結(jié)構(gòu)混淆起來,誤把"Has-A"當(dāng)作"Is-A"。解決辦法:?
?
六、 迪米特法則(LoD)?
迪米特法則(Law of Demeter或簡(jiǎn)寫LoD)又叫最少知識(shí)原則(Least Knowledge Principle或簡(jiǎn)寫為L(zhǎng)KP),也就是說,一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其它對(duì)象有盡可能少的了解。?
其它表述:?
? 只與你直接的朋友們通信?
? 不要跟"陌生人"說話?
? 每一個(gè)軟件單位對(duì)其它的單位都只有最少的知識(shí),而且局限于那些與本單位密切相關(guān)的軟件單位。?
迪米特法則與設(shè)計(jì)模式?
Facade模式、Mediator模式?
使民無知?
《老子》第三章曰:"是以圣人之治,虛其心,實(shí)其腹,弱其志,常使民無知無欲。"使被"統(tǒng)治"的對(duì)象"愚昧"化,處于"無知"的狀態(tài),可以使"統(tǒng)治"的成本降低。?
所謂"最少知識(shí)"原則,實(shí)際上便是老子的"使民無知"的統(tǒng)治之術(shù)。?
不相往來?
《老子》云:"小國(guó)寡民……鄰國(guó)相望,雞犬之聲相聞,民至老死,不相往來。"將被統(tǒng)治的對(duì)象隔離開來,使它們沒有直接的通信,可以達(dá)到分化瓦解,繼而分而治之的效果。迪米特法則與老子的"小國(guó)寡民"的統(tǒng)治之術(shù)不謀而合。?
Open-Closed Principle原則講的是:一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。?
優(yōu)點(diǎn):?
? 通過擴(kuò)展已有軟件系統(tǒng),可以提供新的行為,以滿足對(duì)軟件的新的需求,使變化中的軟件有一定的適應(yīng)性和靈活性。?
? 已有軟件模塊,特別是最重要的抽象層模塊不能再修改,這使變化中的軟件系統(tǒng)有一定的穩(wěn)定性和延續(xù)性。?
二、 里氏代換原則(LSP)?
Liskov Substitution Principle(里氏代換原則):子類型(subtype)必須能夠替換它們的基類型。?
三、 依賴倒置原則(DIP)?
??
依賴倒置(Dependence Inversion Principle)原則講的是:要依賴于抽象,不要依賴于具體。?
簡(jiǎn)單的說,依賴倒置原則要求客戶端依賴于抽象耦合。原則表述:?
抽象不應(yīng)當(dāng)依賴于細(xì)節(jié);細(xì)節(jié)應(yīng)當(dāng)依賴于抽象;?
要針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)編程。?
?
使用傳統(tǒng)過程化程序設(shè)計(jì)所創(chuàng)建的依賴關(guān)系,策略依賴于細(xì)節(jié),這是糟糕的,因?yàn)椴呗允艿郊?xì)節(jié)改變的影響。依賴倒置原則使細(xì)節(jié)和策略都依賴于抽象,抽象的穩(wěn)定性決定了系統(tǒng)的穩(wěn)定性。?
四、 接口隔離原則(ISP)?
接口隔離原則(Interface Segregation Principle)講的是:使用多個(gè)專門的接口比使用單一的總接口總要好。換而言之,從一個(gè)客戶類的角度來講:一個(gè)類對(duì)另外一個(gè)類的依賴性應(yīng)當(dāng)是建立在最小接口上的。?
過于臃腫的接口是對(duì)接口的污染。不應(yīng)該強(qiáng)迫客戶依賴于它們不用的方法。?
實(shí)現(xiàn)方法:?
1、 使用委托分離接口?
2、 使用多重繼承分離接口?
五、 合成/聚合復(fù)用原則(CARP)?
合成/聚合復(fù)用原則(Composite/Aggregate Reuse Principle或CARP)經(jīng)常又叫做合成復(fù)用原則(Composite Reuse Principle或CRP),就是在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象,使之成為新對(duì)象的一部分;新對(duì)象通過向這些對(duì)象的委派達(dá)到復(fù)用已有功能的目的。?
簡(jiǎn)而言之,要盡量使用合成/聚合,盡量不要使用繼承。?
區(qū)分"Has-A"與"Is-A"?
"Is-A"是嚴(yán)格的分類學(xué)意義上定義,意思是一個(gè)類是另一個(gè)類的"一種"。而"Has-A"則不同,它表示某一個(gè)角色具有某一項(xiàng)責(zé)任。?
導(dǎo)致錯(cuò)誤的使用繼承而不是合成/聚合的一個(gè)常見的原因是錯(cuò)誤的把"Has-A"當(dāng)作"Is-A"。?
例如:?
?
實(shí)際上,雇員、經(jīng)理、學(xué)生描述的是一種角色,比如一個(gè)人是"經(jīng)理"必然是"雇員",另外一個(gè)人可能是"學(xué)生雇員",在上面的設(shè)計(jì)中,一個(gè)人無法同時(shí)擁有多個(gè)角色,是"雇員"就不能再是"學(xué)生"了,這顯然是不合理的。?
錯(cuò)誤源于把"角色"的等級(jí)結(jié)構(gòu)與"人"的等級(jí)結(jié)構(gòu)混淆起來,誤把"Has-A"當(dāng)作"Is-A"。解決辦法:?
?
六、 迪米特法則(LoD)?
迪米特法則(Law of Demeter或簡(jiǎn)寫LoD)又叫最少知識(shí)原則(Least Knowledge Principle或簡(jiǎn)寫為L(zhǎng)KP),也就是說,一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其它對(duì)象有盡可能少的了解。?
其它表述:?
? 只與你直接的朋友們通信?
? 不要跟"陌生人"說話?
? 每一個(gè)軟件單位對(duì)其它的單位都只有最少的知識(shí),而且局限于那些與本單位密切相關(guān)的軟件單位。?
迪米特法則與設(shè)計(jì)模式?
Facade模式、Mediator模式?
使民無知?
《老子》第三章曰:"是以圣人之治,虛其心,實(shí)其腹,弱其志,常使民無知無欲。"使被"統(tǒng)治"的對(duì)象"愚昧"化,處于"無知"的狀態(tài),可以使"統(tǒng)治"的成本降低。?
所謂"最少知識(shí)"原則,實(shí)際上便是老子的"使民無知"的統(tǒng)治之術(shù)。?
不相往來?
《老子》云:"小國(guó)寡民……鄰國(guó)相望,雞犬之聲相聞,民至老死,不相往來。"將被統(tǒng)治的對(duì)象隔離開來,使它們沒有直接的通信,可以達(dá)到分化瓦解,繼而分而治之的效果。迪米特法則與老子的"小國(guó)寡民"的統(tǒng)治之術(shù)不謀而合。?
轉(zhuǎn)載于:https://www.cnblogs.com/guojingyang/archive/2008/12/10/1351485.html
總結(jié)
以上是生活随笔為你收集整理的面向对象简单原则(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SD2C大会,JavaScript +
- 下一篇: 在EXE和DLL中,FindResour