单一职责原则(Single Responsibility Principle)

在软件设计、编码过程中有几个基本原则即SOLID原则,学习理解能够帮忙我们写出更健壮的代码。SOLID是五个基本原则的首字母。这五个原则如下:

此篇来学习一下单一职责原则(Single responsibility)

相信很多人都听过单一职责原则(Single Responsibility Principle),那么什么是单一职责原则,怎么才算单一职责原则呢,单一职责原则又有什么好处呢。

记得当初刚开始进入项目组做需求的时候,完全不清楚什么设计模式、架构。一个问题单就困扰很久,慢慢搬砖越来越多,对项目的代码结构、业务有了一定的了解之后,回头看看自己写的代码,真是不忍直视。有一次写发送邮件的代码,将组装邮件内容、附件、发送等全部柔和在一个类里面,然后一位老大哥给review代码的时候就发现问题了,说你这个类写的太乱了,把什么都写在一个类里面了,完全不符合"单一职责原则",当时那个脸红啊,赶紧虚心请教。

什么是单一职责原则呢?

我们来看看定义:一个类应该有且仅有一种原因引起改变(A class should have only one reason to change)

一个职责就是一种会引起类的改变的原因,即如果我们有两种情况(原因)会改变一个类,那么我们就需要把这个类拆分成两个。如果一个类有多个职责,那么当其中一个职责状态改变,那么可能会影响到其他的职责。比如下面这段代码:

// 单一职责?
interface IEmail {
    public void setSender(String sender);

    public void setReceiver(String receiver);

    public void setContent(String content);
}

class Email implements IEmail {

    // set sender;
    public void setSender(String sender) {
    }

    // set receiver;
    public void setReceiver(String receiver) {
    }

    // set content;
    public void setContent(String content) {
    }
}

IEmail是一个接口,Email是一个简单的电子邮件类,保存了发送者,接受者,和邮件内容。看上去好像没什么问题,首先不管怎么样,都会有发送者和接收者,对应就是email,比如写信,一定是有写信人和收信人,但是邮件内容可能会变化,比如说,我们现在的内容是字符串,但是字符串无法实现丰富多彩的样式,随着业务的发展,将来可能要支持HTML、markdown等其他的格式,这个时候就需要修改IEmail和Email,可能会有类似这样的setContent(HTMLContent content)。

如果我们希望实现单一职责模式呢?是否要把content和sender, receiver拆分开呢。

我们可以建立新的接口和类–IContent和Content,来拆分原来的两个职责。具体代码如下:

// 单一职责原则 - 将原来的content改为IContent
interface IEmail {
    public void setSender(String sender);

    public void setReceiver(String receiver);

    public void setContent(IContent content);
}

interface IContent {

}

class Email implements IEmail {
    // set sender;
    public void setSender(String sender) {
    }

    // set receiver;
    public void setReceiver(String receiver) {
    }

    // set content;
    public void setContent(IContent content) {
    }
}

class Content implements IContent {

}

这样修改以后,后面不管Content改成什么样的形式,都可以很方便的扩展,比如说可以

class Content implements IContent {

}

class HTMLContent implements IContent {

}

class MarkDownContent implements IContent {
    
}

这样扩展起来是不是很方便呀。

单一职责原则的优点:

  • 降低类的复杂度
  • 提高可扩展性,以及类的可读性

我们引用《The UNIX Philosophy》书中的两条:

一:小即是美。

二:让程序只做好一件事。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 单一职责原则Single Responsibility Principle,SRP)是面向对象设计中的一项基本原则,它指出一个类或者模块应该有且只有一个单一的功能或职责。 具体来说,单一职责原则要求一个类或者模块只负责一项功能,而不要有多个不同的功能。这样做的好处是可以使得代码更加清晰、易于维护、易于测试,同时也能够提高代码的复用性和可扩展性。 单一职责原则可以应用于各种不同的设计层面,包括类、模块、函数等,它要求每个设计单元都应该有一个清晰的职责,而不是混杂着多个职责。例如,一个类应该只负责一个单一的业务逻辑,而不应该包含过多的控制逻辑或数据访问逻辑。 总之,单一职责原则是面向对象设计中非常重要的一项原则,它能够帮助我们编写出更加清晰、可维护、可测试的代码。 ### 回答2: 单一职责原则(The Single Responsibility Principle)是面向对象设计原则之一。它要求一个类应该只有一个引起变化的原因。 具体而言,单一职责原则意味着一个类或模块应该只负责一个特定的功能或关注点。换句话说,一个类应该只有一个单一的职责。 这个原则的目标是让软件系统更加灵活、可维护和可扩展,因为如果一个类只负责一个职责,那么对于这个职责的变化不会影响到其他的职责。此外,单一职责原则使得代码更加简洁和易懂,因为每个类或模块的功能都是明确的,容易理解和修改。 具体实践单一职责原则需要遵循以下几个原则: 1. 高内聚(High Cohesion):类内部的各个成员方法应该紧密相关。一个类应该只包含与其职责相关的方法和属性,不应该包含多个无关的功能。 2. 低耦合(Low Coupling):类与类之间的依赖要尽量减少。一个类应该尽量减少对其他类的依赖,只与其必要的协作对象进行交互。 3. 分离关注点(Separation of Concerns):将不同的职责分离到不同的类中。每个类应该专注于完成自身的职责,不涉及其他职责。 通过遵循单一职责原则,可以提高代码的可读性、可维护性和可扩展性。同时,它也能够提高代码的复用性,因为一个类只负责一个职责,可以被其他模块或系统复用。 总之,单一职责原则是一种促进代码设计和组织的原则,它强调将不同的职责分离开来,提高代码的模块性和可维护性。这是面向对象设计中的一个重要概念,在软件开发中具有广泛的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值