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

  • 必知必会的设计原则——单一职责原则已关闭评论
  • 94 次浏览
  • A+
所属分类:.NET技术
摘要

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


概述

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

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

   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(); 

总结

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