必知必会的设计原则——单一职责原则

 设计原则系列文章 

  1. 必知必会的设计原则——单一职责原则
  2. 必知必会的设计原则——开放封闭原则
  3. 必知必会的设计原则——依赖倒置原则
  4. 必知必会的设计原则——里氏替换原则
  5. 必知必会的设计原则——接口隔离原则
  6. 必知必会的设计原则——迪米特原则
  7. 必知必会的设计原则——合成复用原则

概述

单一职责原则是最简单的面向对象设计原则!定义为不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。说文字比较干巴巴,我们通过上代码来展示案例;

未使用单一职责原则的代码

   public class Telphone
    {
        public void Dial(string phoneNum)
        {
            Console.WriteLine($"给谁{phoneNum}打电话");
        }
        public void HangUp(string phoneNum)
        {
            Console.WriteLine($"挂断{phoneNum}打电话");
        }
        public void SendMessage(string msg)
        {
            Console.WriteLine($"发送{msg}");
        }
        public void ReciveMessage(string msg)
        {
            Console.WriteLine($"接收{msg}");
        }
    }

内部变化: 如果telphone内部的方法发生变化 就需要修改 不符合单一职责。
外部变化:需要添加新的方法,也需要修改telphone 这是应该的,如果同时内部发生变化就不符合单一职责原则。

使用单一职责原则的代码

打电话的类:

 public interface IDial
    {
        public void DialPhoneNum(string phoneNum);
    }
    public class Dial: IDial
    {
        public void DialPhoneNum(string phoneNum)
        {
            Console.WriteLine($"给谁{phoneNum}打电话");
        }
    }

挂电话的类:

  public interface IHangUp
    {
        public void HangUpPhoneNum(string phoneNum);
       
    }
    public class HangUp: IHangUp
    {
        public void HangUpPhoneNum(string phoneNum)
        {
            Console.WriteLine($"挂断{phoneNum}打电话");
        }
    }

发送接收消息的类:

 public interface IMessage
    {
        public void SendMessage(string msg);
        public void ReciveMessage(string msg);
    }
    public class Message : IMessage
    {
        public void SendMessage(string msg)
        {
            Console.WriteLine($"发送{msg}");
        }
        public void ReciveMessage(string msg)
        {
            Console.WriteLine($"接收{msg}");
        }
    }

调用:

    public class Telphone2
    {
        private IHangUp _hangUp;
        private IMessage _message;
        private IDial _dial;
        public Telphone2()
        {
            _hangUp = new HangUp();
            _message= new Message();
            _dial= new Dial(); 
        }
        public void Output()
        {
            _dial.DialPhoneNum("13067707791");
            _hangUp.HangUpPhoneNum("13067707791");
            _message.SendMessage("mhg");
            _message.ReciveMessage("mhg");
        }
    }
//控制台调用
new Telphone2().Output();

Console.ReadLine(); 

总结

两种案例大家可以自行对比体会,由于单一职责原则比较简单,一般从字面意思上就能看出,这里不过多叙述。

posted @ 2023-02-06 10:28  realyrare  阅读(241)  评论(0编辑  收藏  举报