必知必会的设计原则——单一职责原则
2023-03-20 15:21:58 时间
设计原则系列文章
- 必知必会的设计原则——单一职责原则
- 必知必会的设计原则——开放封闭原则
- 必知必会的设计原则——依赖倒置原则
- 必知必会的设计原则——里氏替换原则
- 必知必会的设计原则——接口隔离原则
- 必知必会的设计原则——迪米特原则
- 必知必会的设计原则——合成复用原则
概述
单一职责原则是最简单的面向对象设计原则!定义为不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。说文字比较干巴巴,我们通过上代码来展示案例;
未使用单一职责原则的代码
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();
总结
两种案例大家可以自行对比体会,由于单一职责原则比较简单,一般从字面意思上就能看出,这里不过多叙述。
相关文章
- 使用Nginx实现负载均衡
- 【秒杀系统】零基础上手秒杀系统(二):令牌桶限流 + 再谈超卖
- 使用Ivy管理项目中的依赖
- 解决系统系统管理员不允许使用保存的凭据登录远程计算机
- Ubuntu全新安装firefox最新版本
- 程序员的素养
- 使用WMI和性能计数器监控远程服务器权限设置
- HTTP基本认证
- 推荐几款自己写博客使用的Ubuntu软件
- 批量修改vss工作目录
- 我使用中的Linux命令和快捷键(For Ubuntu)
- 修改开机启动等待时间(for Ubuntu12.10)
- 处理器架构
- DDD-领域驱动设计简谈
- <5人公司极简研发构架
- 【从零开始撸一个App】Fragment和导航中的使用
- 【从零开始撸一个App】Dagger2
- 数论之中国剩余定理
- 再谈协程
- 也谈Reactor模式