女人常说男人喜新厌旧,只见新人笑,那闻旧人哭,但装饰模式(Decorator)却是一种结交新朋友不忘老朋友的设计模式,非常适合去古代当老公(现代是不行的,因为只能娶一个老婆了)。装饰模式的本质是每一个装饰对象都被保留一个被其装饰的对象,装饰对象在展示新功能时会同时去掉用被其装饰的对象的同功能函数,通过如此层层包含调用(即装饰),形成一个类似链表的结构,接下来的介绍中,我们还会看到更多的类似链表结构的设计模式,比如职责链模式、状态模式。
仍以《大话设计模式》一书中装饰模式的小菜穿衣的例子为例,来看看装...
分类:
编程语言 时间:
2015-07-04 12:47:41
阅读次数:
185
物品锻造是各类奇幻游戏中的常见功能,就拿众所周知的Diablo来说吧。假设角色拥有一把单手剑,可能基础攻击力只有13,但是它有三个装备孔。当给剑镶嵌一颗蓝宝石的时候,它就拥有了额外的冰冻效果并多加2点攻击力;当给剑镶嵌一颗红宝石的时候,它又拥有了额外的火焰伤害并多加3点攻击力;当给剑镶嵌一颗绿宝石的时候,它又拥有了额外的中毒伤害并多加的4点攻击力。当然,也可以三个孔都镶嵌同一色的宝石。本文将说明如...
分类:
其他好文 时间:
2015-07-02 14:08:13
阅读次数:
144
下述使用myDecorator的__call__方法替换aFunction:class myDecorator(object):def __init__(self, f):print("inside myDecorator.__init__()")f() # Prove that function ...
分类:
编程语言 时间:
2015-06-30 21:48:02
阅读次数:
143
Adapter(适配器)
Bridge(桥接)
Composite(组合)
Decorator(修饰)
Facade(外观)
Proxy(外观)...
分类:
其他好文 时间:
2015-06-26 12:57:52
阅读次数:
181
编写无参数decoratorPython的decorator本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。使用 decorator 用Python提供的@语法,这样可以避免手动编写f = decorate(f)这样的代码。考察一个@log的定义:1 def log(f):2 ...
分类:
编程语言 时间:
2015-06-25 12:14:02
阅读次数:
185
@decorator可以动态实现函数功能的增加,但是,经过@decorator“改造”后的函数,和原函数相比,除了功能多一点外,有没有其它不同的地方?
在没有decorator的情况下,打印函数名:
def f1(x):
pass
print f1.__name__
输出: f1
有decorator的情况下,再打印函数名:
def log(f):
def w...
分类:
编程语言 时间:
2015-06-25 09:04:18
阅读次数:
165
装饰模式(Decorator) 装饰模式又名包装(Wrapper)模式。 装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 装饰模式通过创建一个包装对象,也就是装饰,来包裹真实的对象。 装饰模式以对客户端透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉...
分类:
其他好文 时间:
2015-06-22 19:18:02
阅读次数:
114
众所周知装饰器模式用于给对象在运行期间动态的增加某个功能,职责等。相较通过继承的方式来扩充对象的功能,装饰器显得更加灵活,首先,我们可以动态给对象选定某个装饰器,而不用hardcore继承对象来实现某个功能点。其次:继承的方式可能会导致子类繁多,仅仅为了增加某一个单一的功能点,显得有些多余了。装饰器经典实现首先来看看传统的decorator的实现吧!假设现有一类叫Person 的对象,该对象有个sp...
分类:
编程语言 时间:
2015-06-19 10:30:00
阅读次数:
128
(11)装饰模式
定义:动态地给一个对象添加一些额外的职责。就扩展功能而言, 它比生成子类方式更为灵活。
类型:结构型模式
类图:
1. 装饰模式(Decorator)的定义:又名包装(Wrapper)模式,装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
2. 装饰模式以对客户端透明的方式动态的给一个对象附加上更多的责任。换言之客户端并不会...
分类:
其他好文 时间:
2015-06-17 09:39:17
阅读次数:
127