码迷,mamicode.com
首页 > 其他好文 > 详细

装饰模式

时间:2019-02-11 12:54:10      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:wado   ceo   oat   jqm   wsgi   mac   bho   tab   pig   

模式定义:动态地给一个对象增加一些额外的职责(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()

  

装饰模式

标签:wado   ceo   oat   jqm   wsgi   mac   bho   tab   pig   

原文地址:https://www.cnblogs.com/zenan/p/10338085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!