今天介绍三种行为型设计模式:命令模式、中介者模式和解释器模式。
它将请求封装成一个对象,从而使得可以用不同的请求对客户进行参数化。命令模式也支持撤销操作。
(1) 命令模式的结构
命令模式的核心是命令对象和接收者对象之间的关系。命令对象封装了一个特定的请求,包含了执行该请求的方法。接收者对象负责实际执行请求。
以下是命令模式的基本结构:
# 命令对象接口class Command: def execute(self): pass def undo(self): pass# 具体命令对象类class ConcreteCommandA(Command): def __init__(self, receiver): self.receiver = receiver def execute(self): self.receiver.action_a() def undo(self): self.receiver.undo_action_a()class ConcreteCommandB(Command): def __init__(self, receiver): self.receiver = receiver def execute(self): self.receiver.action_b() def undo(self): self.receiver.undo_action_b()# 接收者对象类class Receiver: def action_a(self): print("接收者执行动作A") def action_b(self): print("接收者执行动作B") def undo_action_a(self): print("接收者撤销动作A") def undo_action_b(self): print("接收者撤销动作B")# 客户端代码if __name__ == "__main__": receiver = Receiver() command_a = ConcreteCommandA(receiver) command_b = ConcreteCommandB(receiver) invoker = Invoker() invoker.set_command(command_a) invoker.execute_command() invoker.set_command(command_b) invoker.execute_command()
(2) 命令模式的应用场景
命令模式适用于以下场景:
(3) 命令模式的优点
(4) 命令模式的缺点
它通过封装一系列对象之间的交互,将对象之间的耦合度降低到最低。中介者模式将对象之间的交互转移给中介者对象,从而使得对象之间不再直接相互引用。
(1) 中介者模式的结构
中介者模式的核心是中介者对象,它封装了一系列对象之间的交互逻辑。中介者对象通常包含一个或多个接口,用于与其他对象进行通信。
以下是中介者模式的基本结构:
# 中介者接口class Mediator: def send(self, message, colleague): pass# 同事类接口class Colleague: def set_mediator(self, mediator): pass def send(self, message): pass def receive(self, message): pass# 具体中介者类class ConcreteMediator(Mediator): def __init__(self): self.colleague_a = None self.colleague_b = None def set_colleague_a(self, colleague_a): self.colleague_a = colleague_a def set_colleague_b(self, colleague_b): self.colleague_b = colleague_b def send(self, message, colleague): if colleague == self.colleague_a: self.colleague_b.receive(message) elif colleague == self.colleague_b: self.colleague_a.receive(message)# 具体同事类class ConcreteColleagueA(Colleague): def __init__(self, mediator): self.mediator = mediator def set_mediator(self, mediator): self.mediator = mediator def send(self, message): self.mediator.send(message, self) def receive(self, message): print("同事A收到消息:", message)class ConcreteColleagueB(Colleague): def __init__(self, mediator): self.mediator = mediator def set_mediator(self, mediator): self.mediator = mediator def send(self, message): self.mediator.send(message, self) def receive(self, message): print("同事B收到消息:", message)# 客户端代码if __name__ == "__main__": mediator = ConcreteMediator() colleague_a = ConcreteColleagueA(mediator) colleague_b = ConcreteColleagueB(mediator) mediator.set_colleague_a(colleague_a) mediator.set_colleague_b(colleague_b) colleague_a.send("Hello, colleague B!") colleague_b.send("Hi, colleague A!")
(2) 中介者模式的应用场景
中介者模式适用于以下场景:
(3) 中介者模式的优点
(4) 中介者模式的缺点
它定义了一种语言的文法,并解析相应的语句。解释器模式通过定义语言的文法,将文法中的每个规则映射到一个类,然后通过递归的方式解析语句。
(1) 解释器模式的结构
解释器模式的核心是解释器类,它封装了解释语句的逻辑。解释器类通常包含一个或多个解释方法,用于解释语句的不同部分。
以下是解释器模式的基本结构:
# 抽象表达式类class AbstractExpression: def interpret(self, context): pass# 终结符表达式类class TerminalExpression(AbstractExpression): def interpret(self, context): # 解释终结符表达式的逻辑 pass# 非终结符表达式类class NonterminalExpression(AbstractExpression): def __init__(self): self.expressions = [] def add_expression(self, expression): self.expressions.append(expression) def interpret(self, context): # 解释非终结符表达式的逻辑 for expression in self.expressions: expression.interpret(context)# 上下文类class Context: def __init__(self): self.input = None self.output = None# 客户端代码if __name__ == "__main__": context = Context() # 构建语法树 expression1 = TerminalExpression() expression2 = NonterminalExpression() expression3 = TerminalExpression() expression2.add_expression(expression1) expression2.add_expression(expression3) # 解释语句 expression2.interpret(context)
(2) 解释器模式的应用场景
解释器模式适用于以下场景:
(3) 解释器模式的优点
(4) 解释器模式的缺点
本文链接:http://www.28at.com/showinfo-26-92108-0.htmlPython 实现命令模式、中介者模式和解释器模式
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
下一篇: Vite 是什么(并且为什么如此流行)?