設計模式六大原則:單一職責

定義:

不要存在多餘一個導致類變更的原因。

public class Animal {
        public void breathe(String animal) {
            System.out.println(animal + "呼吸空氣");
        }
    }

    public class Client {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Animal animal = new Animal();
            animal.breathe("牛");
            animal.breathe("羊");
            animal.breathe("豬");
        }
    }

如果這個時候添加魚,因爲魚只能呼吸水,所以需要修改Animal類:

public class Animal {
    public void breathe(String animal) {
        if("魚".equals(animal)){  
            System.out.println(animal+"呼吸水");  
        }else{  
            System.out.println(animal+"呼吸空氣");  
        }  
    }
}
public class Client {
            public static void main(String[] args) {
                // TODO Auto-generated method stub
                Animal animal = new Animal();
                animal.breathe("牛");
                animal.breathe("羊");
                animal.breathe("豬");
                animal.breathe("魚");
            }
        }

這樣做的話,就違背了設計模式的開放擴展,關閉修改原則。所以只能用單一職責模式來解決這個問題:
具有呼吸水職責的類:

public class Aquatic {
    public void breathe(String animal) {
        System.out.println(animal + "呼吸水");
    }
}

具有呼吸空氣職責的類:

public class Terrestrial {
    public void breathe(String animal) {
        System.out.println(animal + "呼吸空氣");
    }
}
public class Client {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Terrestrial terrestrial = new Terrestrial();
        terrestrial.breathe("牛");
        terrestrial.breathe("羊");
        terrestrial.breathe("豬");

        Aquatic aquatic = new Aquatic();
        aquatic.breathe("魚");
    }
}

這樣可以不修改原來的代碼,開放擴展,也是單一職責的表現。

優點:

1、 降低類的複雜度,一個類只負責一項職責,其邏輯肯定要比負責多項職責簡單的多
2、 提高類的可讀性,提高系統的可維護性;
3、 降低變更引起的風險

特殊情況:

只有邏輯足夠簡單,纔可以在代碼級別上違反單一職責原則;
只有類中方法數量足夠少,纔可以在方法級別上違反單一職責原則;

繼承與接口的區別:

繼承類裏面,虛接口必須要在子類裏重寫,即便只有空函數體,所以需要每個子類都重寫基類方法時才繼承。
接口類裏面,虛接口不需要子類全部重寫,所以子類只部分重寫基類方法的時候,用接口類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章