首页 > 编程语言 >Python设计模式-07-装饰模式

Python设计模式-07-装饰模式

时间:2023-06-16 19:00:55浏览次数:46  
标签:07 Python self 抽象 组件 operation 设计模式 装饰 定义

装饰模式是一种结构型设计模式,它允许我们动态地将行为添加到对象中,而不需要使用继承。装饰模式通常包括以下几个角色:

  • 抽象组件(Component):定义了一个接口,用于被装饰对象和装饰器共同实现。

  • 具体组件(Concrete Component):实现了抽象组件定义的接口,并提供了默认的行为。

  • 抽象装饰器(Decorator):定义了一个接口,用于包装抽象组件。

  • 具体装饰器(Concrete Decorator):实现了抽象装饰器定义的接口,并包装了抽象组件。

下面是一个简单的 Python 示例,演示了如何使用装饰模式:

class Component:
    def operation(self):
        pass

class ConcreteComponent(Component):
    def operation(self):
        print('ConcreteComponent: operation')

class Decorator(Component):
    def __init__(self, component):
        self.component = component

    def operation(self):
        self.component.operation()

class ConcreteDecoratorA(Decorator):
    def operation(self):
        super().operation()
        print('ConcreteDecoratorA: operation')

class ConcreteDecoratorB(Decorator):
    def operation(self):
        super().operation()
        print('ConcreteDecoratorB: operation')

component = ConcreteComponent()
decoratorA = ConcreteDecoratorA(component)
decoratorB = ConcreteDecoratorB(decoratorA)

decoratorB.operation()```

在上面的示例中,我们定义了一个抽象组件 `Component`,它定义了一个接口 `operation()`,用于被装饰对象和装饰器共同实现。然后,我们定义了一个具体组件 `ConcreteComponent`,它实现了抽象组件定义的接口,并提供了默认的行为。接下来,我们定义了一个抽象装饰器 `Decorator`,它定义了一个接口 `operation()`,用于包装抽象组件。然后,我们定义了两个具体装饰器 `ConcreteDecoratorA` 和 `ConcreteDecoratorB`,它们实现了抽象装饰器定义的接口,并包装了抽象组件。最后,我们创建了一个具体组件对象 component,并将其传递给具体装饰器 ConcreteDecoratorA 和 ConcreteDecoratorB,从而动态地将行为添加到对象中。

在使用装饰模式时,我们可以通过创建抽象组件和具体组件来定义对象的基本行为。然后,我们可以通过创建抽象装饰器和具体装饰器来动态地将行为添加到对象中。在上面的示例中,我们创建了一个具体组件 `ConcreteComponent`,它实现了抽象组件定义的接口,并提供了默认的行为。然后,我们创建了两个具体装饰器 `ConcreteDecoratorA` 和 `ConcreteDecoratorB`,它们实现了抽象装饰器定义的接口,并包装了抽象组件。最后,我们创建了一个具体组件对象 `component`,并将其传递给具体装饰器 `ConcreteDecoratorA` 和 `ConcreteDecoratorB`,从而动态地将行为添加到对象中。

需要注意的是,装饰模式可以帮助我们在不使用继承的情况下,动态地将行为添加到对象中,从而提高代码的可维护性和可扩展性。同时,装饰模式也可以帮助我们避免创建大量的子类,从而减少代码的复杂性。

标签:07,Python,self,抽象,组件,operation,设计模式,装饰,定义
From: https://www.cnblogs.com/superhin/p/17486339.html

相关文章

  • Python设计模式-17-外观模式
    外观模式是一种结构型设计模式,它为复杂的子系统提供了一个简单的接口,从而隐藏了子系统的复杂性。外观模式通常包括以下几个角色:外观(Facade):提供了一个简单的接口,用于访问子系统中的一组接口。子系统(Subsystem):实现了子系统的功能,并处理外观对象指派的任务。下面是一个简单......
  • Python设计模式-18-中介模式
    中介模式是一种行为型设计模式,它允许对象之间通过一个中介对象进行通信,从而减少对象之间的直接耦合。中介模式通常包括以下几个角色:中介者(Mediator):定义了一个接口,用于与各个同事对象通信,并协调它们之间的交互。具体中介者(ConcreteMediator):实现了中介者定义的接口,并协调各个......
  • Python设计模式-19-备忘录模式
    备忘录模式是一种行为型设计模式,它允许我们在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。备忘录模式通常包括以下几个角色:发起人(Originator):定义了一个接口,用于创建备忘录对象和恢复对象状态。备忘录(Memento):存储发起人对象的内部状态。管理......
  • Python设计模式-20-迭代器模式
    迭代器模式是一种行为型设计模式,它允许我们按照顺序访问一个聚合对象中的元素,而不需要暴露该对象的内部表示。迭代器模式通常包括以下几个角色:迭代器(Iterator):定义了一个接口,用于按照顺序访问聚合对象中的元素。具体迭代器(ConcreteIterator):实现了迭代器定义的接口,并维护了当......
  • Python设计模式-21-解释器模式
    解释器模式是一种行为型设计模式,它定义了一种语言,用于解释和执行特定的任务。解释器模式通常包括以下几个角色:抽象表达式(AbstractExpression):定义了一个接口,用于解释和执行特定的任务。终结符表达式(TerminalExpression):实现了抽象表达式定义的接口,并表示语言中的终结符。......
  • Python设计模式-22-模板模式
    模板模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。模板模式通常包括以下几个角色:抽象类(AbstractClass):定义了一个算法的骨架,其中包含一些抽象方法,用于延迟到子类中实现。具体类(ConcreteClass):实现了抽象类定义的接口,并实现了其中的抽象方法......
  • Python设计模式-06-代理模式
    代理模式是一种结构型设计模式,它提供了一个代理对象来控制对另一个对象的访问。代理模式通常包括以下几个角色:抽象主题(Subject):定义了代理对象和真实对象的公共接口,可以是一个抽象类或接口。真实主题(RealSubject):定义了代理对象所代表的真实对象。代理(Proxy):持有一个真实对象的......
  • Python设计模式-07-桥接模式
    桥接模式是一种结构型设计模式,它将抽象部分和实现部分分离开来,使它们可以独立地变化。桥接模式通常包括以下几个角色:抽象部分(Abstraction):定义了抽象部分的接口,并持有一个实现部分的引用。扩展抽象部分(RefinedAbstraction):扩展了抽象部分的接口,可以包含一些额外的行为。实现部......
  • Python设计模式-08-组合模式
    模式是一种结构型设计模式,它允许我们将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式通常包括以下几个角色:组件(Component):定义了组合中所有对象的通用接口,可以是一个抽象类或接口。叶子节点(Leaf):表示组合中的叶子节点,它没有子节点。组合节点(Composite):表示组合中的......
  • Python设计模式-09-外观模式
    外观模式是一种结构型设计模式,它提供了一个简单的接口,隐藏了系统的复杂性,使得客户端可以更容易地使用系统。外观模式通常包括以下几个角色:外观(Facade):提供了一个简单的接口,隐藏了系统的复杂性,使得客户端可以更容易地使用系统。子系统(Subsystem):实现了系统的功能,但对客户端是不可......