青岛做公司网站注册的多吗,wordpress 怎么安装插件,wordpress多张图片,wordpress手机端网站模板下载失败一、说明
装饰器模式是一种结构型设计模式#xff0c;旨在动态的给一个对象添加额外的职责。
(一) 解决问题
不改变原有对象结构的情况下#xff0c;动态地给对象添加新的功能或职责#xff0c;实现透明地对对象进行功能的扩展。
(二) 使用场景
如果用继承来扩展对象行…
一、说明
装饰器模式是一种结构型设计模式旨在动态的给一个对象添加额外的职责。
(一) 解决问题
不改变原有对象结构的情况下动态地给对象添加新的功能或职责实现透明地对对象进行功能的扩展。
(二) 使用场景
如果用继承来扩展对象行为的方案难以实现或者根本不可行时可以考虑使用装饰器模式。希望在无需修改代码的情况下即可使用对象 且希望在运行时为对象新增额外的行为。
二、结构 部件Component声明封装器和被封装对象的公用接口。具体部件Concrete Component类是被封装对象所属的类。它定义了基础行为但装饰类可以改变这些行为。基础装饰Base Decorator类拥有一个指向被封装对象的引用成员变量。该变量的类型应当被声明为通用部件接口这样它就可以引用具体的部件和装饰。装饰基类会将所有操作委派给被封装的对象。具体装饰类Concrete Decorators定义了可动态添加到部件的额外行为。具体装饰类会重写装饰基类的方法并在调用父类方法之前或之后进行额外的行为。客户端Client可以使用多层装饰来封装部件只要它能使用通用接口与所有对象互动即可。
三、伪代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__
装饰器模式例实现咖啡店的订单系统不同种类的咖啡可以搭配不同的调料使用装饰器对原有对象 增加相应配料信息和价格
class Coffee:基础组件类 - 咖啡def cost(self):return 9.9class Espresso(Coffee):具体组件类 - 浓缩咖啡def cost(self):return super().cost() 1def description(self):return 浓缩咖啡class Decorator(Coffee):装饰器基类 - 调料def __init__(self, coffee):self._coffee coffeedef cost(self):return self._coffee.cost()def description(self):return self._coffee.description()class Milk(Decorator):具体装饰器类 - 牛奶def cost(self):return super().cost() 2def description(self):return super().description() 牛奶class Sugar(Decorator):具体装饰器类 - 糖def cost(self):return super().cost() 0.5def description(self):return super().description() 糖# 客户端代码
if __name__ __main__:浓缩咖啡 (10.9 )浓缩咖啡 牛奶 (12.9 )浓缩咖啡 牛奶 糖 (13.4 )coffee Espresso()print(f{coffee.description()} ({coffee.cost()} ))# 加入牛奶coffee_with_milk Milk(coffee)print(f{coffee_with_milk.description()} ({coffee_with_milk.cost()} ))# 再加入糖coffee_with_sugar Sugar(coffee_with_milk)print(f{coffee_with_sugar.description()} ({coffee_with_sugar.cost()} ))四、优缺点
优点
灵活性高装饰器模式可以动态地给一个对象添加额外的功能而不需要改变其结构单一职责原则。 你可以将实现了许多不同行为的一个大类拆分为多个较小的类。提高了代码复用性可以将装饰器类与具体的组件类分开使得装饰器类可以复用于不同的组件类。
缺点
顺序对功能影响装饰器的顺序会影响最终的功能效果可能会导致功能组合的结果不可预测需要谨慎设计装饰器的顺序。增加了系统复杂性 跳转主页【Python笔记】设计模式-CSDN博客