第二天:装饰模式及面向对象设计原则4则
裝飾模式是為已有功能動(dòng)態(tài)地添加更多功能的一種方式.
當(dāng)系統(tǒng)需要新功能的時(shí)候,是向舊系統(tǒng)中添加新的代碼.這些新加的代碼通常裝飾了原有類的核心職責(zé)或主要行為.這樣的結(jié)果等同于在主類中加入新的字段,新的方法和新的邏輯,從而增加了主類的復(fù)雜度,而這些新加入的東西僅僅是為了滿足一些只在某種特定情況下才會(huì)執(zhí)行的特殊行為的需要.
裝飾模式把每個(gè)要裝飾的功能放在單獨(dú)的類中,并讓這個(gè)類包裝它所要裝飾的對(duì)象,因此,當(dāng)需要執(zhí)行特殊行為時(shí),客戶代碼就可以在運(yùn)行時(shí)根據(jù)需要有選擇地,按順序地使用裝飾功能包裝對(duì)象了.
優(yōu)點(diǎn):
把類中的裝飾功能從類中搬移去除,這樣可以簡(jiǎn)化原有的類.
有效地把類的核心職責(zé)和裝飾功能區(qū)分開了,而且可以去除相關(guān)類中重復(fù)的裝飾模式.
?
面向?qū)ο蟮乃膫€(gè)好處:可維護(hù),可擴(kuò)展,可復(fù)用,靈活性好單一職責(zé)原則:如果一個(gè)類承擔(dān)的職責(zé)過(guò)多,就等于把這些職責(zé)耦合在一起,一個(gè)職責(zé)的變化可能會(huì)消弱或者抑制這個(gè)類完成其他職責(zé)的能力.這種耦合會(huì)導(dǎo)致脆弱的設(shè)計(jì),當(dāng)變化發(fā)生時(shí),設(shè)計(jì)會(huì)遭受到意想不到的破壞。
開放封閉原則是說(shuō)軟件實(shí)體(類,模塊,函數(shù)等等)應(yīng)該可以擴(kuò)展,但是不可修改。
模塊無(wú)法做到絕對(duì)封閉,但應(yīng)在設(shè)計(jì)過(guò)程中,盡量猜測(cè)出最有可能發(fā)生的變化種類,然后構(gòu)造抽象來(lái)隔離那些變化。
等到變化發(fā)生時(shí)立即采取行動(dòng),在我們最初編寫代碼時(shí),假設(shè)變化不會(huì)發(fā)生變化。當(dāng)變化發(fā)生時(shí),我們就創(chuàng)建抽象來(lái)隔離以后發(fā)生的同類變化。
好處:
面對(duì)需求,對(duì)程序的改動(dòng)是通過(guò)增加新代碼進(jìn)行的,而不是更改現(xiàn)有的代碼。
依賴倒置原則:抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象(例子:CPU,內(nèi)存,主板等自己是根據(jù)標(biāo)準(zhǔn)接口設(shè)計(jì)的)
里氏替換原則:子類型必須能夠替換掉它們的父類型。
由于子類型的可替換性才使得使用父類類型的模塊在無(wú)需修改的情況下就可以擴(kuò)展。
程序中所有的依賴關(guān)系都是終止于抽象類或者接口,就是面向?qū)ο蟮脑O(shè)計(jì).
應(yīng)用一則:
數(shù)據(jù)持久化功能開發(fā):對(duì)此功能應(yīng)用裝飾模式, 數(shù)據(jù)->詞匯過(guò)濾->加密->持久化(數(shù)據(jù)庫(kù)(sql,oracle),文件). 綠色標(biāo)識(shí)部分應(yīng)該考慮使用策略模式,應(yīng)對(duì)加密算法的改變.
藍(lán)色劃線部分應(yīng)該考慮使用依賴倒置原則,定義公共接口.? 持久化模塊和使用者依賴公共接口.而互相不知道對(duì)方的細(xì)節(jié)。
雖然,面向?qū)ο笤O(shè)計(jì)原則已經(jīng)學(xué)習(xí)了很多次了,也聽了很多次了,但是仍然每學(xué)習(xí)一次就多一絲領(lǐng)悟加深一層理解。所謂笨鳥要靠時(shí)間積累才能飛,聰明的人也許看過(guò)一遍,兩遍就學(xué)會(huì)了,那么我就看個(gè)八遍,十遍的,哪怕不會(huì)靈活運(yùn)用也要理解精神。
轉(zhuǎn)載于:https://www.cnblogs.com/neking/archive/2013/02/06/2904172.html
總結(jié)
以上是生活随笔為你收集整理的第二天:装饰模式及面向对象设计原则4则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Pycharm(社区版) 创建Flask
- 下一篇: html写自动关机的代码,让电脑自动关机