返回

行为型模式:优雅地掌控软件行为!

iOS

行为型模式:点亮代码优雅之路

踏上设计模式的迷人旅途,行为型模式宛若一颗璀璨的宝石,闪耀着智慧与创造力的光芒。这些模式专注于对象间的互动与协作,为代码的行为提供清晰的结构和组织,赋予代码如诗般优雅的艺术气息。

行为型模式的魔力:协作与沟通的艺术

行为型模式的精髓在于巧妙地协调对象之间的交互,使其能够以一种优雅高效的方式进行沟通。通过这种协作与沟通,代码变得更加灵活、易于维护和可重用,宛如一首精心编排的交响乐,每一个部分都和谐共鸣,奏出动人的乐章!

行为型模式的宝库:策略、观察者、模板方法......

行为型模式家族中,蕴含着众多夺目的瑰宝,其中包括:

  • 策略模式: 策略模式就像一位变幻莫测的魔术师,允许我们在运行时动态改变算法或行为,实现代码的灵活性和可扩展性!
# 定义一个 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")

行为型模式:通往代码优雅之门的钥匙

行为型模式不仅仅是一种设计技术,更是一种艺术,一种让代码变得优雅、高效和可维护的艺术!掌握行为型模式,就如同拥有了一把通往代码优雅之门的钥匙,让你的代码绽放出夺目的光彩!

行为型模式:走向卓越程序员的必经之路

作为一名优秀的程序员,行为型模式是不可或缺的武器库。它不仅能让你写出更加优雅、高效和可维护的代码,更能提升你的设计思维和编程技巧,让你在软件开发的道路上走向卓越!

掌握行为型模式:让编程成为一种艺术

如果你想成为一名真正的编程大师,行为型模式就是你必须掌握的必杀技!它将带你领略软件设计的艺术之美,让你写出的代码如同诗歌般优雅,演奏出美妙的乐章!

常见问题解答

  1. 行为型模式有哪些好处?
    • 提高代码的灵活性、可维护性和可重