標簽(空格分隔): java
六大原則###
參考博客:博客仿荆,以下的內容請參考博客里的例子
- 單一職責原則:一個類只負責一項職責稍浆。
弊端:
類T只負責一個職責P裤唠,這樣設計是符合單一職責原則的昔园。后來由于某種原因,也許是需求變更了详恼,也許是程序的設計者境界提高了,需要將職責P細分為粒度更細的職責P1引几,P2昧互,這時如果要使程序遵循單一職責原則,需要將類T也分解為兩個類T1和T2伟桅,分別負責P1敞掘、P2兩個職責。
這樣做的風險在于職責擴散的不確定性楣铁,因為我們不會想到這個職責P玖雁,在未來可能會擴散為P1,P2盖腕,P3赫冬,P4……Pn。所以記住赊堪,在職責擴散到我們無法控制的程度之前面殖,立刻對代碼進行重構。)
所以必要時可以適當違反單一職責原則:
情況一:只有邏輯足夠簡單哭廉,才可以在代碼級別上違反單一職責原則脊僚;
情況二:只有類中方法數(shù)量足夠少,才可以在方法級別上違反單一職責原則遵绰;
情況三:若不滿足以上兩種情況的話辽幌,還是要遵循單一職責原則,一個類負責一個功能職責
需要說明的一點是單一職責原則不只是面向對象編程思想所特有的椿访,只要是模塊化的程序設計乌企,都適用單一職責原則。
- 里氏替換原則:所有引用基類的地方必須能透明地使用其子類的對象成玫。
具體操作:
當使用繼承時加酵,遵循里氏替換原則。類B繼承類A時哭当,除添加新的方法完成新增功能P2外猪腕,盡量不要重寫父類A的方法,也盡量不要重載父類A的方法钦勘。
繼承作為面向對象三大特性之一陋葡,在給程序設計帶來巨大便利的同時,也帶來了弊端彻采。比如使用繼承會給程序帶來侵入性腐缤,程序的可移植性降低捌归,增加了對象間的耦合性,如果一個類被其他的類所繼承岭粤,則當這個類需要修改時惜索,必須考慮到所有的子類,并且父類修改后绍在,所有涉及到子類的功能都有可能會產生故障门扇。
- 依賴倒置原則:核心思想是面向接口編程
- 接口隔離原則:
接口盡量小,但是要有限度偿渡。對接口進行細化可以提高程序設計靈活性是不掙的事實臼寄,但是如果過小,則會造成接口數(shù)量過多溜宽,使設計復雜化吉拳。所以一定要適度。
(與單一職責原則還是有區(qū)別的)
單一職責原則原注重的是職責适揉;而接口隔離原則注重對接口依賴的隔離留攒。其二,單一職責原則主要是約束類嫉嘀,其次才是接口和方法炼邀,它針對的是程序中的實現(xiàn)和細節(jié);而接口隔離原則主要約束接口接口剪侮,主要針對抽象拭宁,針對程序整體框架的構建。
- 迪米特法則:一個對象應該對其他對象保持最少的了解瓣俯。(低耦合杰标,高內聚)
原因:
類與類之間的關系越密切,耦合度越大,當一個類發(fā)生改變時,對另一個類的影響也越大叨恨。
迪米特法則還有一個更簡單的定義:只與直接的朋友通信。
耦合的方式很多垄惧,依賴、關聯(lián)、組合、聚合等登渣。其中,我們稱出現(xiàn)成員變量毡泻、方法參數(shù)、方法返回值中的類為直接的朋友粘优,而出現(xiàn)在局部變量中的類則不是直接的朋友仇味。也就是說呻顽,陌生的類最好不要作為局部變量的形式出現(xiàn)在類的內部。
- 開閉原則:一個軟件實體如類丹墨、模塊和函數(shù)應該對擴展開放廊遍,對修改關閉
當軟件需要變化時,盡量通過擴展軟件實體的行為來實現(xiàn)變化贩挣,而不是通過修改已有的代碼來實現(xiàn)變化喉前。
開閉原則可能是設計模式六項原則中定義最模糊的一個了,它只告訴我們對擴展開放王财,對修改關閉卵迂,可是到底如何才能做到對擴展開放,對修改關閉绒净,并沒有明確的告訴我們见咒。我們遵循設計模式前面5大原則,以及使用23種設計模式的目的就是遵循開閉原則
- 總結
單一職責原則告訴我們實現(xiàn)類要職責單一挂疆;里氏替換原則告訴我們不要破壞繼承體系改览;依賴倒置原則告訴我們要面向接口編程;接口隔離原則告訴我們在設計接口的時候要精簡單一缤言;迪米特法則告訴我們要降低耦合宝当。而開閉原則是總綱,他告訴我們要對擴展開放胆萧,對修改關閉庆揩。
常用的設計模式###
- 單例模式
參考:博客
未完,待續(xù)鸳碧!