python:状态模式 python允许在运行时打“热补丁”,也就是替换掉类的函数。这让状态模式的实现变的简单。 下面是一个权限验证的鬼畜例子,由于类对象的内部发生了状态变化,所以你没办法知道对象最终是什么状态。所以这个对象是一次性的。不能重复使用。 ``` 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) ``` 更好的做法应该是,让用户来决定对象的状态,这会让程序变的明确。 来自 大脸猫 写于 2017-07-19 16:05 -- 更新于2020-10-19 13:06 -- 0 条评论