設(shè)計(jì)模式——設(shè)計(jì)原則

在軟件開(kāi)發(fā)中倔韭,為了提高軟件系統(tǒng)的可維護(hù)性和可復(fù)用性,增加軟件的可擴(kuò)展性和靈活性虹菲,程序員要盡量根據(jù)6條原則來(lái)開(kāi)發(fā)程序,從而提高軟件開(kāi)發(fā)效率掉瞳、節(jié)約軟件開(kāi)發(fā)成本和維護(hù)成本届惋。

1. 開(kāi)閉原則

對(duì)外擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉菠赚。

在程序需要進(jìn)行拓展的時(shí)候脑豹,不去修改原有的代碼,實(shí)現(xiàn)一個(gè)熱插拔的效果衡查。簡(jiǎn)言之瘩欺,是為了使程序的擴(kuò)展性好,易于維護(hù)和升級(jí)。想要達(dá)到這樣的效果俱饿,我們需要使用接口抽象類歌粥。

因?yàn)槌橄箪`活性好,適應(yīng)性廣拍埠,只要抽象的合理失驶,可以基本保持軟件架構(gòu)的穩(wěn)定。而軟件中易變的細(xì)節(jié)可以從抽象派生來(lái)的實(shí)現(xiàn)類來(lái)進(jìn)行擴(kuò)展枣购,當(dāng)軟件需要發(fā)生變化時(shí)嬉探,只需要根據(jù)需求重新派生一個(gè)實(shí)現(xiàn)類來(lái)擴(kuò)展就可以了。

2. 里氏代換原則

任何基類可以出現(xiàn)的地方棉圈,子類一定可以出現(xiàn)涩堤。

通俗理解:子類可以擴(kuò)展父類的功能,但不要改變父類原有的功能分瘾。換句話說(shuō)胎围,子類繼承父時(shí),除添加新的方法完成新增功能外德召,盡量不要重寫(xiě)父類的方法白魂。

如果通過(guò)重寫(xiě)父類的方法來(lái)完成新的功能,這樣寫(xiě)起來(lái)雖然簡(jiǎn)單上岗,但是整個(gè)繼承體系的可復(fù)用性會(huì)比較差碧聪,特別是運(yùn)用多態(tài)比較頻繁時(shí),程序運(yùn)行出錯(cuò)的概率會(huì)非常大液茎。

3. 依賴倒轉(zhuǎn)原則

高層模塊不應(yīng)該依賴低層模塊逞姿,兩者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié)捆等,細(xì)節(jié)應(yīng)該依賴抽象滞造。簡(jiǎn)單的說(shuō)就是要求對(duì)抽象進(jìn)行編程,不要對(duì)實(shí)現(xiàn)進(jìn)行編程栋烤,這樣就降低了客戶與實(shí)現(xiàn)模塊間的耦合谒养。

4. 接口隔離原則

客戶端不應(yīng)該被迫依賴于它不使用的方法;一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上明郭。

5. 迪米特法則

迪米特法則又叫最少知識(shí)原則买窟。如果兩個(gè)軟件實(shí)體無(wú)須直接通信,那么就不應(yīng)當(dāng)發(fā)生直接的相互調(diào)用薯定,可以通過(guò)第三方轉(zhuǎn)發(fā)該調(diào)用始绍。其目的是降低類之間的耦合度,提高模塊的相對(duì)獨(dú)立性话侄。

只和你的直接朋友交談亏推,不跟“陌生人”說(shuō)話(Talk only to your immediate friends and not to strangers)学赛。迪米特法則中的“朋友”是指:當(dāng)前對(duì)象本身、當(dāng)前對(duì)象的成員對(duì)象吞杭、當(dāng)前對(duì)象所創(chuàng)建的對(duì)象盏浇、當(dāng)前對(duì)象的方法參數(shù)等,這些對(duì)象同當(dāng)前對(duì)象存在關(guān)聯(lián)芽狗、聚合或組合關(guān)系绢掰,可以直接訪問(wèn)這些對(duì)象的方法。

6. 合成復(fù)用原則

盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來(lái)實(shí)現(xiàn)童擎,其次才考慮使用繼承關(guān)系來(lái)實(shí)現(xiàn)滴劲。

通常類的復(fù)用分為繼承復(fù)用和合成復(fù)用兩種。
繼承復(fù)用雖然有簡(jiǎn)單和易實(shí)現(xiàn)的優(yōu)點(diǎn)柔昼,但它也存在以下缺點(diǎn):

  1. 繼承復(fù)用破壞了類的封裝性哑芹。因?yàn)槔^承會(huì)將父類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類炎辨,父類對(duì)子類是透明的捕透,所以這種復(fù)用又稱為“白箱”復(fù)用。
  2. 子類與父類的耦合度高碴萧。父類的實(shí)現(xiàn)的任何改變都會(huì)導(dǎo)致子類的實(shí)現(xiàn)發(fā)生變化乙嘀,這不利于類的擴(kuò)展與維護(hù)。
  3. 它限制了復(fù)用的靈活性破喻。從父類繼承而來(lái)的實(shí)現(xiàn)是靜態(tài)的虎谢,在編譯時(shí)已經(jīng)定義,所以在運(yùn)行時(shí)不可能發(fā)生變化曹质。

采用組合或聚合復(fù)用時(shí)婴噩,可以將已有對(duì)象納入新對(duì)象中,使之成為新對(duì)象的一部分羽德,新對(duì)象可以調(diào)用已有對(duì)象的功能几莽,它有以下優(yōu)點(diǎn):

  1. 它維持了類的封裝性。因?yàn)槌煞謱?duì)象的內(nèi)部細(xì)節(jié)是新對(duì)象看不見(jiàn)的宅静,所以該復(fù)用又稱“黑箱”復(fù)用章蚣。
  2. 對(duì)象間的耦合度低∫碳校可以在類的成員位置聲明抽象纤垂。
  3. 復(fù)用的靈活性高。這種復(fù)用可以在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行磷账,新對(duì)象可以動(dòng)態(tài)地引用與成分對(duì)象類型相同的對(duì)象峭沦。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逃糟,隨后出現(xiàn)的幾起案子熙侍,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛉抓,死亡現(xiàn)場(chǎng)離奇詭異庆尘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)巷送,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)驶忌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人笑跛,你說(shuō)我怎么就攤上這事付魔。” “怎么了飞蹂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵几苍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我陈哑,道長(zhǎng)妻坝,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任惊窖,我火速辦了婚禮刽宪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘界酒。我一直安慰自己圣拄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布毁欣。 她就那樣靜靜地躺著庇谆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凭疮。 梳的紋絲不亂的頭發(fā)上饭耳,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音哭尝,去河邊找鬼哥攘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛材鹦,可吹牛的內(nèi)容都是我干的逝淹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼桶唐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼栅葡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起尤泽,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤欣簇,失蹤者是張志新(化名)和其女友劉穎规脸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體熊咽,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莫鸭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了横殴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片被因。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖衫仑,靈堂內(nèi)的尸體忽然破棺而出梨与,到底是詐尸還是另有隱情,我是刑警寧澤文狱,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布粥鞋,位于F島的核電站,受9級(jí)特大地震影響瞄崇,放射性物質(zhì)發(fā)生泄漏呻粹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一杠袱、第九天 我趴在偏房一處隱蔽的房頂上張望尚猿。 院中可真熱鬧窝稿,春花似錦楣富、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至踪少,卻和暖如春塘安,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背援奢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工兼犯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人集漾。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓切黔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親具篇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纬霞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359