设计模式原则篇:(1)单一职责原则--Single Responsibility Principle
????? ? ? ?? 上篇文章提及到設計模式中應遵循的設計原則,并且列出了設計模式中應當遵循的六大原則。
?????? 次篇文章主要討論單一職責原則。
???????????? 單一職責原則(SRP):
???????????????????????? 不要存在多于一個導致類變更的原因。簡單的講,就是一個類或接口只負責一個"職責"。
????????????? 如果一個類有一個以上的職責,這些職責就耦合在一起了,這種設計十分脆弱,因為當一個職
????????????? 則的變換很可能影響其他職責,會影響復用性。
????????????????????????? 這里需要對類或接口的"職責"做一些理解,SRP中將"職責"理解為“變化的原因”,當你有N
????????????? 個動機去改變類的時候,那么這個類就違法了SRP原則.
?????????????????????? Tips:這里只有你去真正修改了類的時候違反了SRP原則,如果僅僅只是一種推測,并未
??????????????? 實際付之行動,不算違反之一原則。
???????????? 單一職責原則(SRP)優點:
??????????????? 1、可以降低類的復雜度
??????????????? 2、提高類的可讀性,系統的可維護性
??????????????? 3、降低變更的時候對其他功能的影響(變更不可避免)
?????????????? 簡單舉一個例子:關于動物吃東西的問題。
????????????????????? 編寫一個類用于描述動物吃東西:
package com.kiritor; /** * @author Kiritor * 動物類的描述*/ class Animal { public void eatFood(String name) { System.out.println(name+"吃草"); } } public class Client { public static void main(String[] args) { Animal animal = new Animal(); animal.eatFood("羊"); animal.eatFood("牛"); } } ?????????????? 不過這里問題就來了,并不是所有動物都吃草的啊,也有肉食動物的。在不違背單一????? 原則的情況下,我們必須將動物類細分為,肉食性和素食性的。
class AnimalMeat { public void eatFood(String name) { System.out.println(name+"吃肉"); } } class AnimalGlass { public void eatFood(String name) { System.out.println(name+"吃草"); } } public class Client { public static void main(String[] args) { AnimalGlass animal = new AnimalGlass(); animal.eatFood("羊"); AnimalMeat animal2 = new AnimalMeat(); animal2.eatFood("老虎"); } }? ? ? ? ? ? ? ?? 由上述代碼可以知道,這種修改的開銷還是挺大的,不僅需要添加新類,還要修改客戶
???????? 端代碼。有事還不如這樣修改:
class Animal{ public void eatFoodGlass(String animal){ System.out.println(animal+"吃草"); } public void eatFoodMeat(String animal){ System.out.println(animal+"吃肉"); } } public class Client{ public static void main(String[] args){ Animal animal = new Animal(); animal.eatFoodGlass("牛"); animal.eatFoodGlass("羊"); animal.eatFoodMeat("老虎"); } } ???????????? 造成上述的結果就是在使用單一原則的情況下,對于"職責"的劃分沒有一個明確的標準,如果????? 把職責劃分過細反而會造成接口和實現類的數量劇曾,反倒不利于維護和閱讀。所以在使用這個
????? 原則的時候還是要具體問題具體分析。
??????????? 建議就是接口一定要采用單一職責原則,實現類的設計上盡可能做到單一職責原則,最好是一個
????? 原因引起一個類的變化。
??????
轉載于:https://blog.51cto.com/kiritor/1226704
總結
以上是生活随笔為你收集整理的设计模式原则篇:(1)单一职责原则--Single Responsibility Principle的全部內容,希望文章能夠幫你解決所遇到的問題。