官方定义:
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
代码实现有点问题
from __future__ import annotations
class Person():
def __init__(self, name: str, action: Action) -> None:
self.name = name
self.action = action
def do_action(self) -> Action:
print(self.name, self.action.name, end=" ")
return self.action
class Action:
def __init__(self, name: str) -> None:
self.name = name
def amount(self, val: str) -> Action:
print(val, end=" ")
return self
def stop(self) -> None:
print("then stop")
if __name__ == "__main__":
move = Action("move")
person = Person("jack", move)
person.do_action().amount(5).stop()
import abc
# 逻辑乱
# 抽象类定义方法
# 具体类实现
# 日志定义等级,符合日志等级则打印。不符合则传递给下一个类。
#
class AbstractLogger(metaclass=abc.ABCMeta):
INFO = 1
DEBUG = 2
ERROR = 3
_level = 0
def __init__(self):
self._logger = None
def set_next_logger(self, logger):
self._logger = logger
@abc.abstractmethod
def handle(self, level):
pass
class ConsoleLogger(AbstractLogger):
def __init__(self, level):
self._level = level
def handle(self, level):
if self._level >= level:
self.write()
else:
self._logger.handle(level)
def write(self):
print("This is an INFO information.")
class DebugLogger(AbstractLogger):
def __init__(self, level):
self._level = level
def handle(self, level):
if self._level >= level:
self.write()
else:
self._logger.handle(level)
def write(self):
print("This is an DEBUG information.")
class ErrorLogger(AbstractLogger):
def __init__(self, level):
self._level = level
def handle(self, level):
if self._level >= level:
self.write()
else:
self._logger.handle()
def write(self):
print("This is an ERROR information.")
if __name__ == "__main__":
info_logger = ConsoleLogger(AbstractLogger.INFO)
debug_logger = DebugLogger(AbstractLogger.DEBUG)
error_logger = ErrorLogger(AbstractLogger.ERROR)
info_logger.set_next_logger(debug_logger)
debug_logger.set_next_logger(error_logger)
info_logger.handle(3)
debug_logger.handle(0)