規定乙個類只有乙個發生變化的原因。通俗理解為:乙個類只負責一項職責。類t負責兩個不同的職責,當職責p1改變需求時需要修改t類,這時候就有可能因為修改的邏輯導致職責p2出現故障遵循單一原則,建立兩個類t1和t2,在修改t1的時候不會影響t2,同理,修改t2的時候也不影響t1的邏輯類的單一職責比較難以實現,盡量做到只有乙個原因引起變化方法遵循單一原則
建立乙個動物類,告訴系統,這些動物都是呼吸什麼的。功能類:呼叫邏輯:class aniaml
}
執行結果:aniaml aniaml = new aniaml();
aniaml.breath("牛");
aniaml.breath("羊");
11-14 19:16:59.752 28316-28316/? e/mainactivity: 牛呼吸空氣
11-14 19:16:59.753 28316-28316/? e/mainactivity: 羊呼吸空氣
由於之前實現的時候沒有考慮到水生動物,它是呼吸水的,而不是呼吸空氣的。普通**處理(不遵循單一職責原則):新增breath(「魚」),執行結果:class aniamlelse}}
11-14 19:20:23.927 30833-30833/com.designpatterndisclipline e/mainactivity: 牛呼吸空氣
11-14 19:20:23.927 30833-30833/com.designpatterndisclipline e/mainactivity: 羊呼吸空氣
11-14 19:20:23.927 30833-30833/com.designpatterndisclipline e/mainactivity: 魚呼吸水
這種方式修改的簡單,但是會埋下隱患,目前**邏輯比較少,不會出問題,如果再複雜的話,有可能某天執行後結果會是牛呼吸水,這就比較尷尬了。完全遵循單一職責原則,則需要把animal拆分成兩個類,乙個呼吸水乙個呼吸空氣客戶端呼叫邏輯:class animal1
}class animal2
}
執行結果:animal1 aniam1 = new animal1();
animal2 aniam2 = new animal2();
aniam2.breath("牛");
aniam2.breath("羊");
aniam1.breath("魚");
11-14 19:26:06.400 2693-2693/com.designpatterndisclipline e/mainactivity: 牛呼吸空氣
11-14 19:26:06.400 2693-2693/com.designpatterndisclipline e/mainactivity: 羊呼吸空氣
11-14 19:26:06.400 2693-2693/com.designpatterndisclipline e/mainactivity: 魚呼吸水
這種方案完全遵循單一職責原則,完全解決了bug,但是在實際情況中,這種情況還是比較少見的,因為乙個類不會像例子裡那麼簡單,相當複雜,如果為了乙個bug,把乙個類拆分成兩個類,工作量是非常大的,也是不可取的。在原先的animal類中新增乙個方法來處理水生動物呼吸的邏輯,在呼叫的時候修改呼叫方法即可。客戶端呼叫邏輯:class animal
public void breath1(string animal)
}
執行結果:animal aniaml = new animal();
aniaml.breath("牛");
aniaml.breath("羊");
aniaml.breath1("魚");
11-14 19:31:03.231 6189-6189/? e/mainactivity: 牛呼吸空氣
11-14 19:31:03.231 6189-6189/? e/mainactivity: 羊呼吸空氣
11-14 19:31:03.231 6189-6189/? e/mainactivity: 魚呼吸水
最後這種解決辦法雖然沒有完全遵循單一職責原則,但是遵循了方法的單一職責,相較完全的遵循單一職責要優雅得多,所以,在專案構建過程中,並不一定完全按照6大原則進行。設計模式六大原則 單一職責原則
設計模式六大原則 1 單一職責原則 定義 不要存在多於乙個導致類變更的原因。通俗的說,即乙個類只負責一項職責,乙個人只負責做一件事。乙個類,只有乙個引起它變化的原因。應該只有乙個職責。每乙個職責都是變化的乙個軸線,如果乙個類有乙個以上的職責,這些職責就耦合在了一起。這會導致脆弱的設計。當乙個職責發生...
六大原則之單一職責原則
六大原則之單一職責原則 1 什麼是單一職責原則 單一職責比較官方的的定義是 應該有且僅有乙個原因引起類的變更。說的通俗點其實就 像是工廠裡的流水線一樣,每個車間基本上只做一件事,所有車間組合起來就是乙個生產流程。我 們寫程式的時候也可以這樣,將乙個類的功能細化一下爭取做到乙個類只做一件事。到多各類去...
設計模式六大原則 單一職責
不要存在多餘乙個導致類變更的原因。public class animal public class client 如果這個時候新增魚,因為魚只能呼吸水,所以需要修改animal類 public class animal else public class client 這樣做的話,就違背了設計模式的...