介绍
装饰者提供比继承更有弹性的替代方案。 装饰者用用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数)。
装饰者用于通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面加上自己的行为以达到特定的目的。
正文
那么装饰者模式有什么好处呢?前面说了,装饰者是一种实现继承的替代方案。当脚本运行时,在子类中增加行为会...
分类:
编程语言 时间:
2015-07-17 14:09:03
阅读次数:
110
结构意图动态地给一个对象添加一些额外的职责。就增加功能来说,D e c o r a t o r 模式相比生成子类更为灵活。适用性在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。处理那些可以撤消的职责。当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组...
分类:
其他好文 时间:
2015-07-17 08:24:01
阅读次数:
114
代理模式和装饰者模式上在语法形式上几乎完全一样,那么它们的区别在哪里呢?装饰者模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活代理模式:为其它对象提供一种代理以控制对这个对象的访问。其实,它们的着重点一个在于“增加”职责,另一个在于“控制”访问。这是它们最本质的...
分类:
其他好文 时间:
2015-07-16 22:05:14
阅读次数:
150
参考:http://my.oschina.net/gao0516/blog/136103装饰器模式:是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能适配器模式:将一个类的接口转换成客户希望的另外一个接口直接上代码分析:package com.think.cla; import jav...
分类:
编程语言 时间:
2015-07-16 21:46:34
阅读次数:
423
这是在Python学习小组上介绍的内容,现学现卖、多练习是好的学习方式。第一步:最简单的函数,准备附加额外功能?12345678#-*-coding:gbk-*-'''示例1:最简单的函数,表示调用了两次'''defmyfunc():print("myfunc()called.")myfunc()m...
分类:
编程语言 时间:
2015-07-16 19:21:10
阅读次数:
148
枚举例题:package cn.itcast_02;/* * 通过JDK5提供的枚举来做枚举类 */public enum Direction { FRONT, BEHIND, LEFT, RIGHT;}---------------------------------------package c...
分类:
其他好文 时间:
2015-07-16 02:06:38
阅读次数:
192
装饰模式-动态的给对象添加新功能。装饰:所谓锦上添花,装饰就是给加上“花”而它的核心本质还是“锦”。
那么难免就有一个疑问那就直接加花就可以了啊,为什么要弄一个装饰模式出来呢?
举个例子:一个家伙要和面,准备蒸个馒头吃吃。然后准备一些面,加水,呀,水多了,加面…无穷尽也~
我们把装饰单独拿出来实现主体和附加功能的分离,在不使主体变得臃肿的情况下添加需要的新功能。再拿蒸馒头举例,蒸馒头吃的是面,...
分类:
其他好文 时间:
2015-07-15 22:46:54
阅读次数:
162
《head first》中 的例子:咖啡店有各种咖啡饮料,可以往咖啡里面加各种调料变成另一种饮料,如果使用继承的方式来为每一种饮料设计一个类,代码的复杂度很容易膨胀,而且会继承父类的所有特性,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;同时,又掉入了另一个陷阱,随着扩展功能的增多,子类也会增多,各种子类的组合,就会导致类的膨胀,最后,就会被淹没在类的海洋。
这时大神们就发明了装饰者...
分类:
编程语言 时间:
2015-07-15 17:08:54
阅读次数:
447
对已有对象的功能进行扩展(装饰),以获得更加符合用户需求的对象,使得对象具有更加强大的功能,这就是装饰模式。
基于继承的复用缺点:
(1) 系统扩展麻烦,在某些编程语言中无法实现(多继承问题)。
(2) 代码重复,不利于对系统进行修改和维护。
(3) 系统庞大,类的数目非常多。
装饰模式概述
根据合成复用原则,在实现功能复用时,多用关联(组合),少用继承。
装饰类作用...
分类:
其他好文 时间:
2015-07-14 22:45:07
阅读次数:
178