設(shè)計(jì)模式之單一職責(zé)原則

設(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)####:

  1. 降低類(lèi)的復(fù)雜度,一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)職責(zé)
  2. 提高類(lèi)的可讀性和系統(tǒng)的可維護(hù)性
  3. 降低變更引起的風(fēng)險(xiǎn),修改一個(gè)功能時(shí),降低對(duì)其它功能的影響

缺點(diǎn)####:

  1. 拆多了零碎,不好管理,不好使用,成本高
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式: 解決方案和思路,解決問(wèn)題的套路。(具體的招數(shù)) 模式設(shè)計(jì)原則: 指導(dǎo)性原則,方向。(不...
    Matsn閱讀 134評(píng)論 0 0
  • 面向?qū)ο蟮?個(gè)基本要素: 封裝、繼承、多態(tài) 面向?qū)ο蟮?個(gè)基本設(shè)計(jì)原則: 單一職責(zé)原則(Single-Respos...
    badcyc閱讀 972評(píng)論 0 4
  • 在軟件開(kāi)發(fā)中,為了提高軟件系統(tǒng)的可維護(hù)性和可復(fù)用性,增加軟件的可擴(kuò)展性和靈活性,程序員要盡量根據(jù)6條原則來(lái)開(kāi)發(fā)程序...
    Denholm閱讀 266評(píng)論 0 0
  • 架構(gòu)師之路(1)面向過(guò)程和面向?qū)ο?1、引言 機(jī)算機(jī)科學(xué)是一門(mén)應(yīng)用科學(xué),它的知識(shí)體系是典型的倒三角結(jié)構(gòu),所用的基...
    追風(fēng)騷年閱讀 596評(píng)論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無(wú)數(shù)的可能。 ...
    yichen大刀閱讀 7,966評(píng)論 0 4

友情鏈接更多精彩內(nèi)容