設計原則-單一職責原則
阿新 • • 發佈:2019-02-09
1.定義
不要存在多餘一個導致類變更的原因,即一個類只負責一項職責。
2.問題由來
類T負責兩個不同的職責:職責P1,職責P2.當由於職責P1需求發生改變而需要修改類時,有可能導致原本執行正常的職責P2的功能發生故障
3.解決方案
3.1分別建立T1和T2類完成P1和P2的功能。
3.2在程式已經寫好了的情況下,這樣做比較浪費時間,所以說簡單的修改T類是一個不錯的選擇,這樣做的風險是未來可能擴散到Pn,所以在擴散到我們無法控制之前進行重構。
4.舉例:動物呼吸的場景
public class Animal { public void breath(String animal){ System.out.println(animal+"陸地呼吸"); } } class Client{ public static void main(String[] args) { Animal animal=new Animal(); animal.breath("牛"); animal.breath("魚"); } }
4.1顯而易見魚在陸地呼吸不合理
4.2第一種修改(缺陷較大因為以後可能擴充套件為淡水魚和海水魚)
public void breath(String animal){
if("魚".equals(animal)){
System.out.println(animal+"水中呼吸");
}else{
System.out.println(animal+"陸地呼吸");
}
}
4.3第二種修改新增方法(方法上符合單一原則)
/** * 魚的呼吸 * @param animal */ public void fishBreath(String animal){ System.out.println(animal+"水中呼吸"); }
4.4將動物類抽象出來作為介面,分為陸地動物、水中生物等(比較麻煩但便於擴充套件)。
public class LandAnimal implements Animals { public void breath(String animal){ System.out.println(animal+"陸地呼吸"); }; } class Client{ public static void main(String[] args) { Animals landAnimal=new LandAnimal(); Animals waterAnimal=new WaterAnimal(); landAnimal.breath("牛"); waterAnimal.breath("魚"); } }
5.總結
單一職責原則可以提高可讀性便於維護,降低類的複雜度,只要是模組化的程式設計都適用,我們應該靈活運用。