关于python 状态模式的疑问?
最近开始了解编程的一些设计模式,打算从简到繁。这里看到所谓的状态模式,如这样的代码。问题就是,为何要单独设计父子类来表示状态,直接在初始化类的时候创建一个记录状态的变量不就可以了吗?或许 这样做的好处就是为了减少 代码内部状态判断的内容,而只清晰地展示方法的实现?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先为了多态性的考虑,因为python中没有virtual 关键字,所以通过抛出异常的方式来实现虚基类的概念。
再者某个类可以通过设置__set__,__get__特殊方法将其变为数据描述符,这样的好处是,比如后期对于某个属性(该属性绑定了一个数据描述符的类的实例)需要统一开个根号,你就不需要在每个用到它的地方都做修改(如果只是一个简单的整型,你就得在所有引用的地方一个一个改),而是直接修改对应的特殊方法的内部实现就可以了