"""
职责链模式
在状态模式的基础上,把所有状态连城一条链,在链上传递请求,直到把请求处理掉为止
"""
from abc import ABCMeta, abstractmethod
class State(object):
__metaclass__ = ABCMeta
def __init__(self, context):
self.context = context
pass
@abstractmethod
def handle(self):
pass
class StateA(State):
def __init__(self, context):
super(StateA, self).__init__(context)
def handle(self):
if self.context.status == 1:
print("stateA handle")
else:
StateB(self.context).handle()
class StateB(State):
def __init__(self, context):
super(StateB, self).__init__(context)
def handle(self):
if self.context.status == 2:
print("stateB handle")
else:
StateC(self.context).handle()
class StateC(State):
def __init__(self, context):
super(StateC, self).__init__(context)
def handle(self):
if self.context.status == 3:
print("stateC handle")
else:
print("cannot handle")
class Context(object):
def __init__(self):
self._state = StateA(self)
self._status = 1
@property
def status(self):
return self._status
@status.setter
def status(self, status):
self._status = status
def set_state(self, state):
self._state = state
def handle(self):
self._state.handle()
if __name__ == '__main__':
context = Context()
state_a = StateA(context)
context.status = 3
context.handle()
context.status = 4
context.handle()
context.set_state(StateB(context))
context.handle()
职责链模式(python)
最新推荐文章于 2023-02-08 16:20:00 发布