1. 程式人生 > >設計原則-單一職責原則

設計原則-單一職責原則

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.總結

    單一職責原則可以提高可讀性便於維護,降低類的複雜度,只要是模組化的程式設計都適用,我們應該靈活運用。