設(shè)計(jì)模式6大設(shè)計(jì)原則之單一職責(zé)原則
單一職則原則(SRP:Single Responsibility Principle)
一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)職責(zé)。實(shí)現(xiàn)高內(nèi)聚,低耦合的指導(dǎo)方針。
public class Animal
{
private string _Name = string.Empty;
public Animal(string name)
{
this._Name = name;
}
//職責(zé)不單一: 更改其中一種,會(huì)導(dǎo)致所有的都會(huì)一起更改,不合理
public void Breathe()
{
if(this._Name == "雞")
Console.WriteLine(this._Name + "用肺呼吸氧氣");
else if(this._Name == "魚(yú)")
Console.WriteLine(this._Name + "用腮呼吸氧氣");
else if(this._Name == "蚯蚓")
Console.WriteLine(this._Name + "通過(guò)體表的粘液交換氧氣來(lái)呼吸");
else if(this._Name == "植物")
Console.WriteLine(this._Name + "通過(guò)光合作用來(lái)轉(zhuǎn)化二氧化碳來(lái)呼吸");
else
Console.WriteLine("不支持的物種:" + this._Name);
}
}
new Animal("雞").Breathe();
new Animal("魚(yú)").Breathe();
new Animal("蚯蚓").Breathe();
new Animal("植物").Breathe();
上面的一個(gè)類(lèi)內(nèi),即包含了雞、魚(yú)、蚯蚓、植物的呼吸方法,明顯違反了單一職責(zé)原則,按單一職責(zé)原則修改后,代碼如下:
public abstract class AbsAnimal
{
protected string _Name;
protected AbsAnimal(string name)
{
this._Name = name;
}
public abstract void Breathe();
}
public class Chicken : AbsAnimal
{
public Chicken() : base("雞") { }
public override void Breathe()
{
Console.WriteLine(this._Name + "用肺呼吸氧氣");
}
}
public class Fish : AbsAnimal
{
public Fish(string name) : base("魚(yú)") { }
public override void Breathe()
{
Console.WriteLine(this._Name + "用腮呼吸氧氣");
}
}
public class EarthWorm : AbsAnimal
{
public EarthWorm() : base("蚯蚓") { }
public override void Breathe()
{
Console.WriteLine(this._Name + "通過(guò)體表的粘液交換氧氣來(lái)呼吸");
}
}
public class Plants : AbsAnimal
{
public Plants() : base("植物") { }
public override void Breathe()
{
Console.WriteLine(this._Name + "通過(guò)光合作用來(lái)轉(zhuǎn)化二氧化碳來(lái)呼吸");
}
}
AbsAnimal animal = new Chicken();
animal.Breathe();
animal = new Fish();
animal.Breathe();
animal = new EarthWorm();
animal.Breathe();
animal = new Plants();
animal.Breathe();
優(yōu)點(diǎn)####:
- 降低類(lèi)的復(fù)雜度,一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)職責(zé)
- 提高類(lèi)的可讀性和系統(tǒng)的可維護(hù)性
- 降低變更引起的風(fēng)險(xiǎn),修改一個(gè)功能時(shí),降低對(duì)其它功能的影響
缺點(diǎn)####:
- 拆多了零碎,不好管理,不好使用,成本高