设计模式之单一职责原则

设计模式6大设计原则之单一职责原则

单一职则原则(SRP:Single Responsibility Principle)

一个类只负责一项职责。实现高内聚,低耦合的指导方针。

    public class Animal
    {
        private string _Name = string.Empty;

        public Animal(string name)
        {
            this._Name = name;
        }
        
        //职责不单一: 更改其中一种,会导致所有的都会一起更改,不合理
        public void Breathe()
        {
            if(this._Name == "鸡")
                Console.WriteLine(this._Name + "用肺呼吸氧气");
            else if(this._Name == "鱼")
                Console.WriteLine(this._Name + "用腮呼吸氧气");
            else if(this._Name == "蚯蚓")
                Console.WriteLine(this._Name + "通过体表的粘液交换氧气来呼吸");
            else if(this._Name == "植物")
                Console.WriteLine(this._Name + "通过光合作用来转化二氧化碳来呼吸");
            else
                Console.WriteLine("不支持的物种:" + this._Name);
        }
    }
    new Animal("鸡").Breathe();

    new Animal("鱼").Breathe();

    new Animal("蚯蚓").Breathe();

    new Animal("植物").Breathe();

上面的一个类内,即包含了鸡、鱼、蚯蚓、植物的呼吸方法,明显违反了单一职责原则,按单一职责原则修改后,代码如下:

  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("鱼") { }

        public override void Breathe()
        {
            Console.WriteLine(this._Name + "用腮呼吸氧气");
        }
    }

    public class EarthWorm : AbsAnimal
    {
        public EarthWorm() : base("蚯蚓") { }

        public override void Breathe()
        {
           Console.WriteLine(this._Name + "通过体表的粘液交换氧气来呼吸");
        }
    }

    public class Plants : AbsAnimal
    {
        public Plants() : base("植物") { }

        public override void Breathe()
        {
            Console.WriteLine(this._Name + "通过光合作用来转化二氧化碳来呼吸");
        }
    }

    AbsAnimal animal = new Chicken();
    animal.Breathe();

    animal = new Fish();
    animal.Breathe();

    animal = new EarthWorm();
    animal.Breathe();

    animal = new Plants();
    animal.Breathe();

优点####:

  1. 降低类的复杂度,一个类只负责一项职责
  2. 提高类的可读性和系统的可维护性
  3. 降低变更引起的风险,修改一个功能时,降低对其它功能的影响

缺点####:

  1. 拆多了零碎,不好管理,不好使用,成本高
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 设计模式: 解决方案和思路,解决问题的套路。(具体的招数) 模式设计原则: 指导性原则,方向。(不...
    Matsn阅读 135评论 0 0
  • 面向对象的3个基本要素: 封装、继承、多态 面向对象的5个基本设计原则: 单一职责原则(Single-Respos...
    badcyc阅读 975评论 0 4
  • 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序...
    Denholm阅读 266评论 0 0
  • 架构师之路(1)面向过程和面向对象 1、引言 机算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基...
    追风骚年阅读 597评论 0 0
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 8,050评论 0 4

友情链接更多精彩内容