关于python 状态模式的疑问?

发布于 2022-09-05 23:58:23 字数 1294 浏览 37 评论 0

最近开始了解编程的一些设计模式,打算从简到繁。这里看到所谓的状态模式,如这样的代码。问题就是,为何要单独设计父子类来表示状态,直接在初始化类的时候创建一个记录状态的变量不就可以了吗?或许 这样做的好处就是为了减少 代码内部状态判断的内容,而只清晰地展示方法的实现?

class NetworkCardState:
    def send(self):
        raise NotImplementedError

    def receive(self):
        raise NotImplementedError

class Online(NetworkCardState):
    def send(self):
        print "sending Data"

    def receive(self):
        print "receiving Data"

class Offline(NetworkCardState):
    def send(self):
        print "cannot send...Offline"

    def receive(self):
        print "cannot receive...Offline"

class NetworkCard:
    def __init__(self):
        self.online = Online()
        self.offline = Offline()
        self.currentState = self.offline

    def startConnection(self):
        self.currentState = self.online

    def stopConnection(self):
        self.currentState = self.offline

    def send(self):
        self.currentState.send()

    def receive(self):
        self.currentState.receive()

def main():
    myNetworkCard = NetworkCard()
    print "without connection:"
    myNetworkCard.send()
    myNetworkCard.receive()
    print "starting connection"
    myNetworkCard.startConnection()
    myNetworkCard.send()
    myNetworkCard.receive()

if __name__ == '__main__':
    main()

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尘世孤行 2022-09-12 23:58:23

首先为了多态性的考虑,因为python中没有virtual 关键字,所以通过抛出异常的方式来实现虚基类的概念。

再者某个类可以通过设置__set__,__get__特殊方法将其变为数据描述符,这样的好处是,比如后期对于某个属性(该属性绑定了一个数据描述符的类的实例)需要统一开个根号,你就不需要在每个用到它的地方都做修改(如果只是一个简单的整型,你就得在所有引用的地方一个一个改),而是直接修改对应的特殊方法的内部实现就可以了

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