python:状态模式

2019-11-22 09:36:37 浏览数 (1)

python允许在运行时打“热补丁”,也就是替换掉类的函数。这让状态模式的实现变的简单。 下面是一个权限验证的鬼畜例子,由于类对象的内部发生了状态变化,所以你没办法知道对象最终是什么状态。所以这个对象是一次性的。不能重复使用。

代码语言:javascript复制
import types

class Role(object):
    def __init__(self):
        self.check = types.MethodType(check_admin, self)


def check_admin(self, power):
    if power > 10:
        print("is admin")
    else:
        # 开始发生状态转换
        self.check = types.MethodType(check_user, self)
        self.check(power)


def check_user(self, power):
    if 0 < power <= 10:
        print("is user")
    else:
        self.check = types.MethodType(check_block, self)
        self.check(power)

def check_block(self, power):
    print("is block")


def check(power):
    obj = Role()
    obj.check(power)

check(5)

更好的做法应该是,让用户来决定对象的状态,这会让程序变的明确。

0 人点赞