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

打印 上一主题 下一主题

主题 906|帖子 906|积分 2718

概述

单一职责原则是最简单的面向对象设计原则!定义为不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。说文字比较干巴巴,我们通过上代码来展示案例;
未使用单一职责原则的代码
  1.    public class Telphone
  2.     {
  3.         public void Dial(string phoneNum)
  4.         {
  5.             Console.WriteLine($"给谁{phoneNum}打电话");
  6.         }
  7.         public void HangUp(string phoneNum)
  8.         {
  9.             Console.WriteLine($"挂断{phoneNum}打电话");
  10.         }
  11.         public void SendMessage(string msg)
  12.         {
  13.             Console.WriteLine($"发送{msg}");
  14.         }
  15.         public void ReciveMessage(string msg)
  16.         {
  17.             Console.WriteLine($"接收{msg}");
  18.         }
  19.     }
复制代码
内部变化: 如果telphone内部的方法发生变化 就需要修改 不符合单一职责。
外部变化:需要添加新的方法,也需要修改telphone 这是应该的,如果同时内部发生变化就不符合单一职责原则。
使用单一职责原则的代码

打电话的类:
  1. public interface IDial
  2.     {
  3.         public void DialPhoneNum(string phoneNum);
  4.     }
  5.     public class Dial: IDial
  6.     {
  7.         public void DialPhoneNum(string phoneNum)
  8.         {
  9.             Console.WriteLine($"给谁{phoneNum}打电话");
  10.         }
  11.     }
复制代码
挂电话的类:
  1.   public interface IHangUp
  2.     {
  3.         public void HangUpPhoneNum(string phoneNum);
  4.       
  5.     }
  6.     public class HangUp: IHangUp
  7.     {
  8.         public void HangUpPhoneNum(string phoneNum)
  9.         {
  10.             Console.WriteLine($"挂断{phoneNum}打电话");
  11.         }
  12.     }
复制代码
发送接收消息的类:
  1. public interface IMessage
  2.     {
  3.         public void SendMessage(string msg);
  4.         public void ReciveMessage(string msg);
  5.     }
  6.     public class Message : IMessage
  7.     {
  8.         public void SendMessage(string msg)
  9.         {
  10.             Console.WriteLine($"发送{msg}");
  11.         }
  12.         public void ReciveMessage(string msg)
  13.         {
  14.             Console.WriteLine($"接收{msg}");
  15.         }
  16.     }
复制代码
调用:
  1.     public class Telphone2
  2.     {
  3.         private IHangUp _hangUp;
  4.         private IMessage _message;
  5.         private IDial _dial;
  6.         public Telphone2()
  7.         {
  8.             _hangUp = new HangUp();
  9.             _message= new Message();
  10.             _dial= new Dial();
  11.         }
  12.         public void Output()
  13.         {
  14.             _dial.DialPhoneNum("13067707791");
  15.             _hangUp.HangUpPhoneNum("13067707791");
  16.             _message.SendMessage("mhg");
  17.             _message.ReciveMessage("mhg");
  18.         }
  19.     }
复制代码
  1. //控制台调用
  2. new Telphone2().Output();
  3. Console.ReadLine();
复制代码
总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表