加入收藏  |  设为首页
网站首页 公司简介 服务承诺 新闻动态 案例展示 装饰知识 人才招聘 联系我们
Get Adobe Flash player
   
案例风格 : PRODUCT LIST
欧式古典风格
现代简约风格
地中海风格
田园风格
自然风格
站内搜索 : SEARCH
装饰知识 : KNOWLEDGE
菊花和枸杞泡水喝有什…
依托呼叫中心客服系统…
2021归国人员想落户北…
电磁加热水是不结垢吗…
不断满足消费者个性化…
海南在线 家居装饰频道…
联系金润 : CONTACT
客服电话:0731-89917416
技术咨询:18008837114
传 真:0731-89918422
电子邮箱:mmheng@foxmail.com
地 址:荷塘区东城龙庭
二栋508室)
当前位置 首页 > 新闻动态

装饰模式的效果需要动态代理来承托你晓得吗?客官里边看!

作者:金润中国 来源:未知 日期:2018-2-19 15:45:14 人气:
导读:装饰模式(DecoratorPattern)的定义是“动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比于生成子类更为灵活”,不过,使用Java的动态代理也可…

  装饰模式(Decorator Pattern)的定义是“动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比于生成子类更为灵活”,不过,使用Java的动态代理也可以实现装饰模式的效果,而且其灵活性、适应性都会更强。

  我们以片《猫和老鼠》(Tom and Jerry)为例,看看如何包装小Jerry让它更强大。首先定义Jerry的类:老鼠(Rat类),代码如下:

  接下来,我们要给Jerry增加一些能力,比如飞行,钻地等能力,当然使用继承也很容易实现,但我们这里只是临时的为Rat类增加这些能力,使用装饰模式更符合此处的场景,首先定义装饰类,代码如下:

  此处定义了两种能力:一种是飞行,另一种是钻地,我们如果把这两种属性赋予到Jerry身上,那就需要一个包装动作类了,代码如下:

  注意看doStuff方法,一个装饰类型必然是抽象构建(Component)的子类型,它必须实现doStuff方法,此处的doStuff方法委托给了动态代理执行,并且在动态代理的控制器Handler中还设置了决定装饰方式和行为的条件(即代码中InvocationHandler匿名类中的if判断语句),当然,此处也可以通过读取持久化数据的方式进行判断,这样就更加灵活了。

  抽象构建有了,装饰类也有了,装饰动作类也完成了,那我们就可以编写客户端进行调用了,代码如下:

  此类代码只一个比较通用的装饰模式,只需要定义被装饰的类及装饰类即可,装饰行为由动态代理实现,实现了对装饰类和被装饰类的完全解耦,提供了系统的扩展性。

  

首页 | 案例展示 | 装饰知识 | 新闻资讯 | 关于金润 | 联系金润
Copyright 2010 - 2011 中国金润装饰有限公司 All rights reserved. BY FXT 湘ICP备07035491号