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

2021-08-10 19:14:02 字數 2812 閱讀 2268

規定乙個類只有乙個發生變化的原因。通俗理解為:乙個類只負責一項職責。

類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: 羊呼吸空氣

由於之前實現的時候沒有考慮到水生動物,它是呼吸水的,而不是呼吸空氣的。

普通**處理(不遵循單一職責原則):

class aniamlelse}}

新增breath(「魚」),執行結果:

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 這樣做的話,就違背了設計模式的...