返回
行为型模式:优雅地掌控软件行为!
iOS
2023-06-01 08:57:03
行为型模式:点亮代码优雅之路
踏上设计模式的迷人旅途,行为型模式宛若一颗璀璨的宝石,闪耀着智慧与创造力的光芒。这些模式专注于对象间的互动与协作,为代码的行为提供清晰的结构和组织,赋予代码如诗般优雅的艺术气息。
行为型模式的魔力:协作与沟通的艺术
行为型模式的精髓在于巧妙地协调对象之间的交互,使其能够以一种优雅高效的方式进行沟通。通过这种协作与沟通,代码变得更加灵活、易于维护和可重用,宛如一首精心编排的交响乐,每一个部分都和谐共鸣,奏出动人的乐章!
行为型模式的宝库:策略、观察者、模板方法......
行为型模式家族中,蕴含着众多夺目的瑰宝,其中包括:
- 策略模式: 策略模式就像一位变幻莫测的魔术师,允许我们在运行时动态改变算法或行为,实现代码的灵活性和可扩展性!
# 定义一个 Context 类,它有一个 Strategy 类型的属性
class Context:
def __init__(self, strategy):
self.strategy = strategy
# 调用策略的算法方法
def do_something(self):
self.strategy.algorithm()
# 定义一个 ConcreteStrategyA 类,它实现 Strategy 类的算法方法
class ConcreteStrategyA:
def algorithm(self):
print("ConcreteStrategyA algorithm")
# 定义一个 ConcreteStrategyB 类,它实现 Strategy 类的算法方法
class ConcreteStrategyB:
def algorithm(self):
print("ConcreteStrategyB algorithm")
# 创建一个 Context 对象并设置一个 ConcreteStrategyA 策略
context = Context(ConcreteStrategyA())
# 调用 do_something() 方法,执行 ConcreteStrategyA 的算法
context.do_something()
# 改变 Context 的策略为 ConcreteStrategyB
context.strategy = ConcreteStrategyB()
# 再次调用 do_something() 方法,执行 ConcreteStrategyB 的算法
context.do_something()
- 观察者模式: 观察者模式犹如一位敏锐的侦探,当目标对象发生变化时,它能够迅速通知所有关注者,让它们及时做出反应!
# 定义一个 Subject 类,它拥有一个观察者列表和一个状态属性
class Subject:
def __init__(self):
self.observers = []
self.state = None
# 添加一个观察者到观察者列表
def attach(self, observer):
self.observers.append(observer)
# 从观察者列表中移除一个观察者
def detach(self, observer):
self.observers.remove(observer)
# 通知所有观察者状态发生改变
def notify(self):
for observer in self.observers:
observer.update(self)
# 设置 Subject 的状态
def set_state(self, state):
self.state = state
self.notify()
# 定义一个 Observer 类,它有一个 update() 方法,用于当 Subject 的状态改变时更新自己的状态
class Observer:
def __init__(self, subject):
self.subject = subject
subject.attach(self)
# 当 Subject 的状态改变时,更新自己的状态
def update(self, subject):
print(f"Observer: Subject's state changed to {subject.state}")
# 创建一个 Subject 对象
subject = Subject()
# 创建两个 Observer 对象并将其附加到 Subject
observer1 = Observer(subject)
observer2 = Observer(subject)
# 改变 Subject 的状态
subject.set_state("new state")
- 模板方法模式: 模板方法模式就像一位经验丰富的导师,为子类提供了一个通用的框架,子类可以继承并扩展这个框架,实现代码的可重用性和一致性!
# 定义一个抽象类 AbstractClass,它包含一个模板方法
class AbstractClass:
def template_method(self):
self.primitive_operation1()
self.primitive_operation2()
# 这是模板方法,它定义了算法的结构
def primitive_operation1(self):
raise NotImplementedError()
# 这是模板方法,它定义了算法的另一个步骤
def primitive_operation2(self):
raise NotImplementedError()
# 定义一个 ConcreteClassA 类,它继承 AbstractClass 并实现其原始操作
class ConcreteClassA(AbstractClass):
def primitive_operation1(self):
print("ConcreteClassA primitive_operation1")
def primitive_operation2(self):
print("ConcreteClassA primitive_operation2")
# 定义一个 ConcreteClassB 类,它继承 AbstractClass 并实现其原始操作
class ConcreteClassB(AbstractClass):
def primitive_operation1(self):
print("ConcreteClassB primitive_operation1")
def primitive_operation2(self):
print("ConcreteClassB primitive_operation2")
# 创建一个 ConcreteClassA 对象
concrete_class_a = ConcreteClassA()
# 调用模板方法,执行算法
concrete_class_a.template_method()
# 创建一个 ConcreteClassB 对象
concrete_class_b = ConcreteClassB()
# 调用模板方法,执行算法
concrete_class_b.template_method()
- 命令模式: 命令模式是一个强大的指令官,它将请求封装成独立的对象,使请求的发出者和执行者能够解耦,从而提高代码的灵活性和可测试性!
# 定义一个 Command 接口,它有一个 execute() 方法
class Command:
def execute(self):
pass
# 定义一个 ConcreteCommandA 类,它实现了 Command 接口
class ConcreteCommandA(Command):
def __init__(self, receiver):
self.receiver = receiver
def execute(self):
self.receiver.action()
# 定义一个 ConcreteCommandB 类,它实现了 Command 接口
class ConcreteCommandB(Command):
def __init__(self, receiver):
self.receiver = receiver
def execute(self):
self.receiver.action()
# 定义一个 Receiver 类,它拥有一个 action() 方法
class Receiver:
def action(self):
print("Receiver action")
# 创建一个 Receiver 对象
receiver = Receiver()
# 创建两个 ConcreteCommand 对象
command_a = ConcreteCommandA(receiver)
command_b = ConcreteCommandB(receiver)
# 创建一个 Invoker 对象,它持有 Command 对象并调用它们的 execute() 方法
invoker = Invoker()
# 将 Command 对象添加到 Invoker
invoker.add_command(command_a)
invoker.add_command(command_b)
# 调用 Invoker 的 execute() 方法,执行 Command 对象
invoker.execute()
- 责任链模式: 责任链模式就像一个高效的流水线,将请求沿着一条链条依次传递,每个处理者都有机会处理请求,直到找到合适的处理者为止,提高代码的可扩展性和松散耦合性!
# 定义一个 Handler 接口,它有一个 handle() 方法
class Handler:
def __init__(self, successor):
self.successor = successor
def handle(self, request):
pass
# 定义一个 ConcreteHandlerA 类,它实现了 Handler 接口
class ConcreteHandlerA(Handler):
def handle(self, request):
if request == "requestA":
print("ConcreteHandlerA handled request")
else:
self.successor.handle(request)
# 定义一个 ConcreteHandlerB 类,它实现了 Handler 接口
class ConcreteHandlerB(Handler):
def handle(self, request):
if request == "requestB":
print("ConcreteHandlerB handled request")
else:
self.successor.handle(request)
# 创建一个 Handler 链
handler_a = ConcreteHandlerA(ConcreteHandlerB(None))
# 处理请求
handler_a.handle("requestA")
handler_a.handle("requestB")
handler_a.handle("requestC")
行为型模式:通往代码优雅之门的钥匙
行为型模式不仅仅是一种设计技术,更是一种艺术,一种让代码变得优雅、高效和可维护的艺术!掌握行为型模式,就如同拥有了一把通往代码优雅之门的钥匙,让你的代码绽放出夺目的光彩!
行为型模式:走向卓越程序员的必经之路
作为一名优秀的程序员,行为型模式是不可或缺的武器库。它不仅能让你写出更加优雅、高效和可维护的代码,更能提升你的设计思维和编程技巧,让你在软件开发的道路上走向卓越!
掌握行为型模式:让编程成为一种艺术
如果你想成为一名真正的编程大师,行为型模式就是你必须掌握的必杀技!它将带你领略软件设计的艺术之美,让你写出的代码如同诗歌般优雅,演奏出美妙的乐章!
常见问题解答
- 行为型模式有哪些好处?
- 提高代码的灵活性、可维护性和可重