[Python 中的策略设计模式](https://res.cloudinary.com/practicaldev/image/fetch/s--XlHz8puK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/vhu1k43a2tcf4fre947v.png)

如果您熟悉面向对象编程的基础知识及其原理,并且在您的项目中使用它,那么也许是时候开始学习不同的设计模式并使用它们了。

一个好的 OO 需要一个好的 OO 设计师。目标是我们试图拥有可重用、可维护和可扩展的代码。

所以你需要一个好的面向对象设计。这就是设计模式可以帮助我们的地方!

有很多设计模式,您可以在 Gangs of Four (GoF) Design Patterns 一书中找到并阅读它们。

今天我们将讨论一种最简单和最流行的设计模式。

策略模式被认为是一种行为设计模式。

它允许您定义算法,将每个算法放入一个单独的类中,并使您的对象可互换。

例如,如果你想拥有一个对象并改变它的行为,你需要修改类代码。

想象一下,您有一个基于 OO 的计算器,它只获取数字并具有设置器,并且您需要向其添加新的功能和方法,例如求和、减法、乘法和除法。

这次你不会在类中实现这些方法。

首先,我们需要一个这样的摘要:

from abc import ABC, abstractmethod

class Operation_strategy(ABC):
    @abstractmethod
    def do_operation(self, n1, n2):
        pass

进入全屏模式 退出全屏模式

之后,您需要为每个操作生成新的类。

class Sum_strategy(Operation_strategy):
    def do_operation(self, n1, n2):
        return n1 + n2

class Sub_strategy(Operation_strategy):
    def do_operation(self, n1, n2):
        return n1 - n2

class Mul_strategy(Operation_strategy):
    def do_operation(self, n1, n2):
        return n1 * n2

class Div_strategy(Operation_strategy):
    def do_operation(self, n1, n2):
        if n2 != 0:
            result_number = n1 / n2
            return result_number
        else:
            raise ValueError("Sorry, no numbers below zero")

进入全屏模式 退出全屏模式

现在还有一件事,你必须在你的计算器类中初始化并设置一个操作设置器。

也许现在你很困惑,说发生了什么事。但让我为你说清楚。

在计算器类内部,我们有 3 个设置器(第一个数字、第二个数字、操作),而不是 2 个数字设置器(第一个数字和第二个数字)。

班级不知道要做什么,它只是得到数字和一个操作!

使用这种模式,您可以轻松地定义对象的行为,而无需更改类代码,这是一种简洁的编码方式,因为它们彼此分开。

您可以在my Github上查看、下载和运行完整版代码,这更有意义。这里是代码。

点击阅读全文
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐