装饰模式

Posted zenan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰模式相关的知识,希望对你有一定的参考价值。

模式定义:动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。

模式结构:

  • Component: 抽象构件
  • ConcreteComponent: 具体构件
  • Decorator: 抽象装饰类
  • ConcreteDecorator: 具体装饰类

 技术图片

应用场景:
1)需要扩展一个类的功能,或给一个类增加附加责任。
2)需要动态的给一个对象增加功能,这些功能可以再动态地撤销。
3)需要增加一些基本功能的排列组合而产生的非常大量的功能,从而使继承变得不现实。

 

场景介绍:变形金刚本体为car,可以变身为robot,airplane

from abc import ABCMeta, abstractmethod


class AutoBotsInterface(metaclass=ABCMeta):
    @abstractmethod
    def move(self):
        pass


class Car(AutoBotsInterface):
    def move(self):
        print("driver")


# 分割线
# 此处我们需要动态增加Car的功能,即装饰car实例
class Changer(AutoBotsInterface):
    def __init__(self, instanceObj):
        self._instance = instanceObj

    def move(self):
        self._instance.move()
        # 新增功能
        pass


class Airplane(Changer):
    def move(self):
        print("fly")


class Robot(Changer):
    def move(self):
        print("run")

    def speak(self):
        print("i can speak")


if __name__ == "__main__":
    bumblebee = Car()
    bumblebee.move()

    airplane = Airplane(bumblebee)
    robot = Robot(bumblebee)

    airplane.move()
    robot.move()
    robot.speak()

  




以上是关于装饰模式的主要内容,如果未能解决你的问题,请参考以下文章

Thymeleaf 模板 - 有没有办法装饰模板而不是包含模板片段?

swift设计模式学习 - 装饰模式代码大全

设计模式---装饰者模式

设计模式之单例模式

装饰模式与代理模式的区别

Java设计模式之装饰者模式