设计模式:单一功能原则(Single responsibility principle)

发布于 2025-01-10 22:45:22 字数 2236 浏览 0 评论 0

单一功能原则是我们在面向对象设计中非常重要的一个原则,在通过保证单一功能原则的情况下,我们的功能将变得更加容易实现和测试,并且还可以提高代码的复用性,此外还可以使得我们的代码更加简洁明了。

单一功能原则要求我们的每个类、函数和模块都只有一个单一的功能,即我们的代码只能有一个“改变的原因”。如果我们的代码会因为两个或以上完全不同的起因而发生改变,或是做了明显不同的事情,那么就违反了这个原则,并且这样的代码很可能也是设计很差的代码。

优化前的代码

以下是一个跟踪话费余额的示例程序:

class BalanceOfPhoneReminder:

    def __init__(self, balanceToRemind, balance):
        self.balanceToRemind = balanceToRemind
        self.balance = balance

    def trackBalance(self, cost):
        self.balance -= cost
        if self.balanceToRemind >= self.balance:
            self.logBalanceSurplus()

    def logBalanceSurplus(self):
        print(f'当前话费余额{self.balance}元,已不足{self.balanceToRemind}元,请及时充值')


balanceToRemind = BalanceOfPhoneReminder(15, 30)
balanceToRemind.trackBalance(10)
balanceToRemind.trackBalance(10)

上面代码中的 BalanceOfPhoneReminder 即实现了追踪话费余额的功能( trackBalance ),又实现了打印余额不足消息的功能( logBalanceSurplus )。现在假设我们要把打印余额更改为发送邮件,那么我们势必要修改 BalanceOfPhoneReminder 的代码,这意味着在开发完毕后,我们又得测试一遍追踪话费余额的功能。

此外,我们能够很明显地发现追踪消费和打印消息两个发生的原因是完全不同的,一个起因是余额的改变,一个起因是仅仅需要打印而已。而我们强行把这样两个本该独立的功能耦合在了一起,就使得了我们代码的可维护性大大降低,也不利于后续开发的代码可复用性。

优化后的代码

下面我们依据单一功能原则,将打印消息的代码从跟踪话费余额的代码中抽离出来为一个单独的模块 logger.py

def log_message(message):
    print(message)

然后我们跟踪话费余额的代码就可以变为:

from logger import log_message


class BalanceOfPhoneReminder:

    def __init__(self, balanceToRemind, balance):
        self.balanceToRemind = balanceToRemind
        self.balance = balance

    def trackBalance(self, cost):
        self.balance -= cost
        if self.balanceToRemind >= self.balance:
            log_message(
                f'当前话费余额{self.balance}元,'
                f'已不足{self.balanceToRemind}元,请及时充值')


balanceToRemind = BalanceOfPhoneReminder(15, 30)
balanceToRemind.trackBalance(10)
balanceToRemind.trackBalance(10)

通过对单一功能原则的应用,我们的代码变得更加容易维护,并且也抽离出了一个通常的打印消息模块,后面如果要修改打印消息为发送邮件也会变得更加轻松,因为我们只需对 logger.py 进行修改即可,而跟踪话费余额代码却可以原封不动。

参考链接

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

奢欲

暂无简介

文章
评论
25 人气
更多

推荐作者

zyhello

文章 0 评论 0

滥情空心

文章 0 评论 0

Meets

文章 0 评论 0

你的笑

文章 0 评论 0

决绝

文章 0 评论 0

feifan

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文