L12A装饰(Decorate)模式.pptVIP

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
L12A装饰(Decorate)模式

装饰模式的结构 * * L12 A 装饰(Decorate)模式 wxz 面向对象设计方法 装饰模式使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩展是完全透明的。 模式的类图 装饰模式的类图如下图所示 源代码 下面就给出装饰模式的示意性源代码。首先是抽象构件角色的源代码,如代码清单1所示。 代码清单1:定义中的构件类的示意性源代码 Package com.javapatterns.decorator; Public interface Component { /** *商业方法 */ void sampleOperation(); } 下面是装饰角色的源代码,如代码清单2所示。 代码清单2:定义中的装饰类的示意性源代码 Package com.javapatterns.decorator; Public class Decorator implements Component { private Component component; /** * 构造子 */ public Decorator(Component component) { ponent = component; } /** * 构造子 */ public Decorator() { //write your code here } /** * 商业方法,委派给构件 */ public void sampleOperation() { component.sampleOperation(); } } 应当指出的有以下几点: 在上面的装饰类里,有一个私有的属性 component , 其数据类型是构件(Component)。 此装饰类实现了构件(Component)接口。 接口的实现方法也值得注意,每一个实现的方法都是委派给父类,但并不单纯的委派,而是有功能的增强。 虽然Decorator 类不是一个抽象类,在实际应用中也不一定是抽象类,但是由于他的功能是一个抽象角色,因此也常常称它为抽象装饰。 下面就是具体装饰角色的源代码,如代码清单3所示。 代码清单3:定义中的具体构件类的示意性源代码 Package com.javapatterns.decorator; Public class ConcreteComponent implements Component { /** * 构造子 */ public ConcreteComponent() { //Write your code here } /** * 商业方法 */ public void sampleOperation() { //Write your code here } } 具体装饰类实现了抽象装饰类所声明的 sampleOperation()方法,如代码清单4所示。 代码清单1:定义中的具体装饰类的示意性源代码 Package com.javapattern.decorator; Public class ConcreteDecorator extends Decorator { /** * 商业方法 */ public void sampleOperation() { super.sampleOperation(); } } 对象图 装饰模式的对象图呈链状结构,假设共有三个具体装饰类,分别称为Decorator1, Decorator2和Decorator3,具体构件类是ConcreteComponent。一个典型的创建过程如代码清单5所示。 代码清单5:一个典型的创建过程的源代码 new Decorator1( new Decorator2( new Decorator3( new ConcreteComponent() ) ) ); 这就意味着Decorator1的对象持有一个对Decorator2对象的引用,后者则持有一个对Decorator3对象的引用,再后者持有一个对具体构件ConcreteComponent对象的引用,这种链式的引用关系使装饰模式看上去像是一个LinkedList, 如下图所示。 使用装饰模式的优点和缺点 使用装饰模式主要有以下的优点: (1)装饰模式与继承关系的目的都是要扩展对象的功能, 但是装饰模式可以提供比继承更多的灵活性. ---装饰模式允许系统动态地决定“贴上”一个需要的“装饰”,或者除掉一个不需要的“装饰”.继承关系则不同,继承关

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档