就一個類別而言,應該僅有一個引起它變化的原因
先來說一個例子

這個開關違反了單一職則原則
他是電燈的開關,同時又會影響到電梯!?
我只是想省電關燈,結果有5個人被我順手關在電梯裡了
他同時擔任了電燈的職責與電梯的職責
就一般人的想法就會覺得不合理,但是在寫程式上就可能會寫出這種程式
喔~反正都是開關麻~幹嘛計較這麼多
這樣的偷懶就會影響到未來程式維護困難
像是這個實體開關,他線都已經接好了才亡羊補牢,貼一張警告的紙
要是一開始把燈和電梯的開關分開就可以免除後續的種種困擾(也不會有人被困在電梯內)
程式 :
把這個開關變成程式,這是一個超級開關,可以同時控制燈和電梯
public class SuperSwitch
{
public void TurnOn()
{
Console.WriteLine("開燈嚕");
Console.WriteLine("電梯運轉");
}
public void TurnOff()
{
Console.WriteLine("關燈嚕");
Console.WriteLine("電梯停止");
}
}
內心小劇場Part1
static void Main(string[] args)
{
SuperSwitch superSwitch = new SuperSwitch();
superSwitch.TurnOn();
Console.WriteLine("5人進電梯準備下樓");
Console.WriteLine("路人甲 : 電燈好浪費電,關一個");
superSwitch.TurnOff();
Console.WriteLine("電梯內五人 : !@#$^@#$!");
Console.WriteLine("路人甲 : 關燈錯了嗎?");
Console.ReadLine();
}
結果 :

這樣是不是很困擾!?
小小修改一下
將個開關分開
public class LightSwitch
{
public void TurnOn()
{
Console.WriteLine("開燈嚕");
}
public void TurnOff()
{
Console.WriteLine("關燈嚕");
}
}
public class ElevatorSwitch
{
public void TurnOn()
{
Console.WriteLine("電梯運轉");
}
public void TurnOff()
{
Console.WriteLine("電梯停止");
}
}
內心小劇場Part2
static void Main(string[] args)
{
LightSwitch lightSwitch = new LightSwitch();
ElevatorSwitch elevatorSwitch = new ElevatorSwitch();
lightSwitch.TurnOn();
elevatorSwitch.TurnOn();
Console.WriteLine("5人進電梯準備下樓");
Console.WriteLine("路人甲 : 電燈好浪費電,關一個");
lightSwitch.TurnOff();
Console.WriteLine("路人甲 : 省電救地球");
Console.WriteLine("電梯 : 一樓到了,億勞告阿,蟻樓兜勒");
Console.ReadLine();
}
結果 :

又能省電救地球,又能讓大家順利下樓,這樣不是很棒嘛!?!?
不過代價呢?
現實生活上要改變必須要重新接線阿,配電阿~
程式呢? 分開就好了
把功能寫再一起的人不是沒經過思考就寫的人就是懶惰的人
新手發文,如有錯誤請不吝嗇指教,謝謝。