程序設(shè)計(jì)的七大原則

在程序開(kāi)發(fā)過(guò)程中初婆,為了讓代碼更加健壯蓬坡,更具有復(fù)習(xí)用性和可維護(hù)性,在設(shè)計(jì)的過(guò)程中一般會(huì)遵循以下六個(gè)原則:

  • 開(kāi)閉原則
  • 單一原則
  • 代替原則
  • 依賴原則
  • 接口隔離原則
  • 最少原則
  • 合成/聚合復(fù)用原則

開(kāi)閉原則:

程序的設(shè)計(jì)應(yīng)該是不約束擴(kuò)展烟逊,即擴(kuò)展開(kāi)放渣窜,但又不能修改已有功能,即修改關(guān)閉宪躯。因?yàn)樵谲浖芷趦?nèi)乔宿,經(jīng)常會(huì)出在原有功能基礎(chǔ)上擴(kuò)展新功能。這時(shí)访雪,不能因?yàn)檐浖呀?jīng)上線详瑞,不擴(kuò)展新功能掂林,但也不能直接修改舊的功能。正確的做法是坝橡,在原有功能上泻帮,擴(kuò)展一個(gè)新的功能,新的需求依賴新的功能去實(shí)現(xiàn)计寇。這樣就既保證了老功能不受影響锣杂,有擴(kuò)展了新功能。開(kāi)閉原則一條非常重要的原則番宁,可以說(shuō)其它原則的基石元莫。

單一原則

就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因蝶押。具體說(shuō)踱蠢,在做編程的時(shí)候,很自然的回個(gè)一個(gè)類加上各種各樣的功能棋电。這樣意味著茎截,無(wú)論任何需求要來(lái),都需要更改這個(gè)類赶盔,這樣其實(shí)是很糟糕的企锌,維護(hù)麻煩,復(fù)用不可能招刨,也缺乏靈活性霎俩。如果一個(gè)類承擔(dān)的職責(zé)過(guò)多,就等于把這些職責(zé)耦合起來(lái)沉眶,一個(gè)職責(zé)變化可能會(huì)削弱或者抑制這個(gè)類完成其他職責(zé)的能力打却。這種耦合會(huì)導(dǎo)致設(shè)計(jì)很脆弱,當(dāng)變化發(fā)生時(shí)谎倔,設(shè)計(jì)會(huì)遭到很多意想不到的破壞柳击。

代替原則(里氏代換原則):

派生類(子類)對(duì)象能夠替換其基類(父類)對(duì)象被調(diào)用。這條原則主要是說(shuō)片习,在程序中捌肴,任何調(diào)用基類對(duì)象實(shí)現(xiàn)的功能,都可以調(diào)用派生類對(duì)象來(lái)替換藕咏,當(dāng)然状知,反過(guò)來(lái)是不行的。其實(shí)這里主要說(shuō)的是繼承問(wèn)題孽查,既然派生類繼承基類饥悴,那它的對(duì)象也應(yīng)該相應(yīng)繼承基類對(duì)象的實(shí)現(xiàn),當(dāng)然也就因該能替換基類對(duì)象。如果無(wú)法替換西设,就說(shuō)明這個(gè)派生類繼承有問(wèn)題瓣铣,需要修改設(shè)計(jì)。

依賴倒轉(zhuǎn)原則:

這條原則說(shuō)的是程序設(shè)計(jì)應(yīng)該依賴抽象接口贷揽,而不應(yīng)該依賴具體實(shí)現(xiàn)棠笑。經(jīng)常聽(tīng)到的接口編程思想,其實(shí)說(shuō)的主要就是這個(gè)原則禽绪。道理也很簡(jiǎn)單蓖救,接口是穩(wěn)定的,實(shí)現(xiàn)是不穩(wěn)定的印屁。這也要求藻糖,一旦接口確定,就不應(yīng)該再進(jìn)行修改了库车。而根據(jù)接口的實(shí)現(xiàn),是可以根據(jù)具體問(wèn)題和情況樱拴,采用不同的手段去實(shí)現(xiàn)柠衍。

接口隔離原則:

接口隔離是說(shuō),使用多個(gè)隔離接口晶乔,比使用單個(gè)接口要好珍坊,還是一個(gè)降低類之間耦合度的意思。經(jīng)常提到的降低耦合正罢,降低依賴阵漏,主要也是通過(guò)這個(gè)原則來(lái)達(dá)到的。另外翻具,這樣設(shè)計(jì)接口也可以給使用者帶來(lái)方便履怯,因?yàn)椋叫〉慕涌隈捎荆驮胶脤?shí)現(xiàn)叹洲,復(fù)用性也越高。

最少原則(迪米特法則)

一個(gè)實(shí)體應(yīng)當(dāng)盡可能少的與其他實(shí)體之間發(fā)生相互作用工禾。這樣做的目的在于減少依賴运提,獨(dú)立功能,以便更好的復(fù)用闻葵。

合成/聚合復(fù)用原則:

在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象民泵,使之成為新對(duì)象的一部分,新的對(duì)象通過(guò)這些對(duì)象的委派達(dá)到復(fù)用已有功能的目的槽畔。設(shè)計(jì)原則是:盡量使用合成/聚合栈妆,盡量不要使用繼承(需要從一個(gè)類拓展出新的方法,盡量不要使用繼承,使用新的方法)签钩。

額外知識(shí)

類之間的關(guān)系:

繼承:指的是一個(gè)類(稱為子類)繼承另外的一個(gè)類(稱為基類)的功能掏呼,并增加它自己的新功能的能力,繼承是類與類之間最常見(jiàn)的關(guān)系铅檩。

聚合:指的是整體與部分的關(guān)系憎夷,通常在定義一個(gè)整體類后,再去分析這個(gè)整體類的組成結(jié)構(gòu)昧旨。從而找出一些組成類拾给,該整體類和組成類之間就形成了聚合關(guān)系。

組合:也表示類之間整體和部分的關(guān)系兔沃,但是組合關(guān)系中部分和整體具有統(tǒng)一的生存期蒋得。一旦整體對(duì)象不存在,部分對(duì)象也將不存在乒疏。部分對(duì)象與整體對(duì)象之間具有共生死的關(guān)系额衙。

關(guān)聯(lián):指的是模型元素之間的一種語(yǔ)義聯(lián)系,是類之間的一種很弱的聯(lián)系怕吴。關(guān)聯(lián)可以有方向窍侧,可以是單向關(guān)聯(lián),也可以是雙向關(guān)聯(lián)转绷。一般情況是一個(gè)類的方法參數(shù)是另一個(gè)類的實(shí)例對(duì)象伟件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市议经,隨后出現(xiàn)的幾起案子斧账,更是在濱河造成了極大的恐慌,老刑警劉巖煞肾,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咧织,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡籍救,警方通過(guò)查閱死者的電腦和手機(jī)拯爽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钧忽,“玉大人毯炮,你說(shuō)我怎么就攤上這事∷屎冢” “怎么了桃煎?”我有些...
    開(kāi)封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)大刊。 經(jīng)常有香客問(wèn)我为迈,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任葫辐,我火速辦了婚禮搜锰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耿战。我一直安慰自己蛋叼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布剂陡。 她就那樣靜靜地躺著狈涮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸭栖。 梳的紋絲不亂的頭發(fā)上歌馍,一...
    開(kāi)封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音晕鹊,去河邊找鬼松却。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溅话,可吹牛的內(nèi)容都是我干的玻褪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼公荧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了同规?” 一聲冷哼從身側(cè)響起循狰,我...
    開(kāi)封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎券勺,沒(méi)想到半個(gè)月后绪钥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡关炼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年程腹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儒拂。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寸潦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出社痛,到底是詐尸還是另有隱情见转,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布蒜哀,位于F島的核電站斩箫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乘客,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一狐血、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧易核,春花似錦匈织、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至井氢,卻和暖如春弦追,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背花竞。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工劲件, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人约急。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓零远,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親厌蔽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牵辣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在程序開(kāi)發(fā)過(guò)程中,為了讓代碼更加健壯奴饮,更具有復(fù)習(xí)用性和可維護(hù)性纬向,在設(shè)計(jì)的過(guò)程中一般會(huì)遵循以下六個(gè)原則: 開(kāi)閉原則 ...
    vincentgemini閱讀 11,908評(píng)論 2 4
  • 什么是設(shè)計(jì)模式 在GoF(Gang of Four)的書籍《Design Patterns - Elements ...
    zhrowable閱讀 1,028評(píng)論 0 1
  • 什么是面向?qū)ο蠹夹g(shù) 面向?qū)ο蠹夹g(shù)是一種以對(duì)象為基礎(chǔ)逾条,以事件或消息來(lái)驅(qū)動(dòng)對(duì)象執(zhí)行處理的程序設(shè)計(jì)技術(shù) 面向?qū)ο笥心男┨?..
    CyrusChan閱讀 1,561評(píng)論 0 1
  • 簡(jiǎn)述 面向?qū)ο蟮脑O(shè)計(jì)原則有七個(gè),包括:開(kāi)閉原則投剥、里氏代換原則师脂、迪米特原則(最少知道原則)、單一職責(zé)原則江锨、接口分隔原...
    半畝房頂閱讀 665評(píng)論 0 7
  • 程序設(shè)計(jì)的6大原則: 單一職責(zé)原則里氏替換原則依賴倒置原則接口隔離原則迪米特法則開(kāi)閉原則 從根本學(xué)好吃警,理解為什么要...
    silencefun閱讀 2,408評(píng)論 1 4