第10章 装饰模式.pptVIP

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

装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。 可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的装饰器,从而实现不同的行为。 装饰模式优点 通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象。 具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,在使用时再对其进行组合,原有代码无须改变,符合“开闭原则”。 装饰模式优点 使用装饰模式进行系统设计时将产生很多小对象,这些对象的区别在于它们之间相互连接的方式有所不同,而不是它们的类或者属性值有所不同,同时还将产生很多具体装饰类。这些装饰类和小对象的产生将增加系统的复杂度,加大学习与理解的难度。 装饰模式缺点 比继承更加灵活机动的特性,也同时意味着装饰模式比继承更加易于出错,排错也很困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。 装饰模式缺点 何时使用装饰器模式 需要扩展一个类的功能,或给一个类增加附加责任。 需要动态地给一个对象增加功能,这些功能可以动态撤销。 需要增加由一些基本的排列组合产生大量的功能,从而使继承关系变得不现实 练习题 一段Java代码的核心逻辑是一个平均值计算程序。请使用装饰模式在它的基础上实现两个额外的计算功能:超过平均值的数字个数和方差。 用装饰模式创建一个具有多个关键属性的过滤器超类。该过滤器类将: (1)支持构造器接收某Writer对象为参数; (2)充当过滤器类层次的超类; (3)提供除write(:int)外所有Writer方法的默认实现. 练习题 public class BeanComparator implements Comparator, Serializable { ? ????private String property; ????private Comparator comparator; ? ????public BeanComparator() { ????????this( null ); ????} ? ????public BeanComparator( String property ) { ????????this( property, ComparableComparator.getInstance() ); } ? ????public BeanComparator( String property, Comparator comparator ) { ????????setProperty( property ); ????????if (comparator != null) { ????????????parator = comparator; ????????} else { ????????????parator = ComparableComparator.getInstance(); ????????} ????} ? ????public void setProperty( String property ) { ????????perty = property; ????} ????public String getProperty() { ????????return property; ????} ????public Comparator getComparator() { ????????return comparator; ????} ? ????public int compare( Object o1, Object o2 ) { ? ????????if ( property == null ) { ????????????// compare the actual objects ????????????return pare( o1, o2 ); ????????} ? ????????try { ????????????Object value1 = PropertyUtils.getProperty( o1, property ); ????????????Object value2 = PropertyUtils.getProperty( o2, property ); ????????????return pare( value1, value2 ); ????????} ????????catch ( IllegalAccessException iae ) { ????????????throw new RuntimeException( Ille

文档评论(0)

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

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

1亿VIP精品文档

相关文档