设计模式 - 浅谈单一职责原则

单一职责原则

原则说明:单一职责原则(Single responsibility principle)规定每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。

为什么要遵守该原则

违反单一职责原则会导致代码的复杂性增加,可读性降低,同时也会增加代码修改的难度。当一个类承担的职责过多时,这个类的复杂性就会增加,这就增加了出错的可能性。

示例

假定我们要输出一个日志,定义了一个日志类

public class Log {
    public void getLog() {
        // 获取Log
    }

    public void formatLog() {
        // 格式化Log
    }

    public void printLog() {
        // 打印Log
    }
}

这个类违反了单一职责原则,因为它有三个职责:获取日志、格式化日志和打印日志。
如果我们需要改变日志的获取方式(或改变日志的格式或打印方式),我们就需要修改这个类。
为了遵守单一职责原则,我们应该将这个类分解为三个类,每个类只负责一项职责。

public class Log {
    public void getLog() {
        // 获取Log
    }
}

public class LogFormatter {
    public void formatLog(Log log) {
        // 格式化Log
    }
}

public class LogPrinter {
    public void printLog(Log log) {
        // 打印Log
    }
}

这样我们就遵守了单一职责,我们的代码就更加模块化,易于理解和维护。

本文链接:

https://pugqq.com/archives/single-responsibility.html
设计模式 - 浅谈单一职责原则 - I/O
1 评论
    11月24日 回复

    [...]}与单一职责的区别回顾一下单一职责原则。就会发现,这两个特别像,那么区别是什么?单一职责原则强调的是类和模块的职责划分。它要求一个类或者模块只负责一项职责,这样做的好处是当这项职责发生变化时,只需要修改这个类或模块,不会影响到其他的功能。接口隔离原则则是从接口的角度来看待问题。它要求我们在设计接口时,应该尽量细化接口,让接口尽可能小。这样做的好处是降低了类之间的耦合度,提高了代码的灵活性。单一职责[...]

# 最近更新

Nginx的proxy_pass指令完全拆解2021-03-21

Nginx配置Jenkins域名访问2021-01-03

设计模式 - 浅谈备忘录模式2020-12-02

设计模式 - 浅谈中介者模式2020-11-23

设计模式 - 浅谈迭代器模式2020-11-02

MySQL5.7 字符集设置2020-10-26

设计模式 - 浅谈状态模式2020-10-23

设计模式 - 浅谈访问者模式2020-10-13

设计模式 - 浅谈观察者模式2020-10-12

设计模式 - 浅谈命令模式2020-09-21