【单一职责原则】

单一职责原则针对的问题

有一个类T负责两个不同的职责:职责P1和职责P2。当因为职责P1的需求发生改变而需要修改类T的时候,有可能会导致原本运行正常的职责P2功能发生故障。

单一职责原则的解决方案

遵循单一职责原则,分别建立两个类C1、C2,使C1完成职责P1功能,C2完成职责P2功能。这样,当修改类C1的时候,不会使职责P2发生故障风险。同理,当修改C2的时候,也不会使职责P1发生故障风险。

什么是职责扩散

在软件编程中,谁也不希望因为修改了一个功能导致其他的功能发生故障。而避免出现这一问题的方法便是遵循单一职责原则。虽然单一职责原则如此简单,并且被认为是常识,但是即使是经验丰富的程序员写出的程序也会有违背这一设计原则的代码存在。这是职责扩散导致的。所谓的职责扩散,指的就是因为某种原因,职责P1被分化为粒度更细的职责P1和P2。

比如说,类C只负责一个职责P,这样设计是符合单一职责原则的。后来由于某种原因,或许是需求变更了,又或许是程序的设计者境界提高了,需要将职责P细分为粒度更细的职责P1和P2。这时候,如果要使程序遵循单一职责原则,就需要将类C也分解为两个类C1和C2,分别去负责P1和P2两个职责。但是在程序已经写好的情况下这样做,十分浪费时间和精力。所以,简单地修改类C,用它来负责两个职责是一个比较不错的选择,虽然这样做会有悖于单一职责原则。

适当地违背单一职责原则有时候反而能提高开发效率,因此设计原则还是要按照实际需求来选择使用的。

单一职责原则的优点

  • 降低类的复杂度,一个类只负责一个职责。这样写出来的代码逻辑肯定要比负责多项职责简单得多。
  • 提高类的可读性,提高系统的可维护性。
  • 降低变更引起的风险。变更是必然的,如果单一职责原则遵守得好,当修改一个功能的时候可以显著降低对其他功能的影响。

需要说明的一点是,单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责原则。比如说单一职责原则不仅仅适用于类,还适用于方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单一职责原则(Single Responsibility Principle,SRP)是面向对象设计中的一个重要原则。它要求一个类或模块应该只负责完成一个职责或功能。换句话说,一个类应该只有一个引起它变化的原因。 在Java中,我们可以通过以下几种方式来遵循单一职责原则: 1. 将不同的职责分离到不同的类中:将一个类中的多个职责拆分成多个类,每个类只负责一个职责。这样可以提高代码的可维护性和可扩展性。 2. 使用接口进行解耦:通过定义接口,将不同的职责分离开来,使得类之间的依赖关系更加松散。这样可以降低类之间的耦合度,提高代码的灵活性。 3. 使用设计模式:设计模式是一种经过验证的解决特定问题的方案。在遵循单一职责原则时,可以使用一些设计模式,如策略模式、观察者模式等,来将不同的职责分离开来,使得代码更加清晰和可维护。 下面是一个示例代码,演示了如何在Java中遵循单一职责原则: ```java // 负责处理用户信息的类 class UserInfoHandler { public void saveUserInfo(UserInfo userInfo) { // 保存用户信息的逻辑 } } // 负责发送邮件的类 class EmailSender { public void sendEmail(String email, String message) { // 发送邮件的逻辑 } } // 负责生成报表的类 class ReportGenerator { public void generateReport(List<Data> dataList) { // 生成报表的逻辑 } } ``` 在上面的示例中,我们将处理用户信息、发送邮件和生成报表这三个不同的职责分别放在了不同的类中,每个类只负责完成一个职责。这样可以使得代码更加清晰和易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值