java-android设计模式学习笔记(7):装饰者模式-编程开发技术

java-android设计模式学习笔记(7):装饰者模式-编程开发技术

ID:30768800

大小:632.05 KB

页数:11页

时间:2019-01-03

java-android设计模式学习笔记(7):装饰者模式-编程开发技术_第1页
java-android设计模式学习笔记(7):装饰者模式-编程开发技术_第2页
java-android设计模式学习笔记(7):装饰者模式-编程开发技术_第3页
java-android设计模式学习笔记(7):装饰者模式-编程开发技术_第4页
java-android设计模式学习笔记(7):装饰者模式-编程开发技术_第5页
资源描述:

《java-android设计模式学习笔记(7):装饰者模式-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java/android设计模式学习笔记(7):装饰者模式-编程开发技术java/android设计模式学习笔记(7):装饰者模式原文出处:Shawn_Dut这篇将会介绍装饰者模式(DecoratorPattern),装饰者模式也称为包装模式(WrapperPattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同吋它也是继承关系的一种替代方案之一,但比继承更加灵活。在现实生活中也可以看到很多装饰者模式的例子,或者可以人胆的说装饰者模式无处不在,就拿一件东西來说,可以给它披上无数层不一样的外壳,但是这件东西述是这件东西,外壳不过是用来扩展这个东西的

2、功能而已,这就是装饰者模式,装饰者的这个角色也许各不相同但是被装饰的对彖本质是不变的。我们的口标是允许类统一扩展,在不修改现有代码的情况下,就可搭配新的行为。如能实现这样的目标,有什么好处呢?这样的设计具有弹性,可以应对改变,可以接受新的功能來应对改变的需求,也就是00原则中的对扩展开放和对修改关闭的开闭原则。PS:对技术感兴趣的同鞋加群544645972—起交流设计模式总目录java/android设计模式学习笔记目录特点动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式相比生成子类更加灵活,提供了有别于继承的另一种选择。装饰者模式可以静态的,或者根据需要可以动态

3、的在运行时为一个对彖扩展功能。被装饰者和众多的装饰者都是继承自一个接口,他们有着一样的行为特性。装饰者模式是继承的另一种选择方式,继承是在编译的时候为类添加新的行为,并且这个改变会影响所有原来该类的实体,装饰者模式就不一样,它提供-•种能够在运行时根据需要选择不同运行对象的功能。装饰者模式和继承这两种方式的不同Z处在某些扩展功能的情况下显得尤为重要,在一些而向对象编程的语言屮,类无法在运行时被创建,而且当需要扩张功能时,这些行为往往无法预测,这就意味着在每个可能的情况下,这个类都需要被创建,所以对比Z下,装饰者模式优点在于每个装饰者都是对象,在运行吋被创建,并且能够在每次使用吋

4、根据需要自己组合。UML类图我们现在來看看装饰者模式的U011类图:装饰者模式共冇四大角色:oComponent:抽象组件可以是一个接口或者是抽象类,其充当的就是被装饰的原始对彖,用来定义装饰者和被装饰者的基本行为。oConcreteComponent:纽件具体实现类该类是Component类的基本实现,也是我们装饰的具体对象。oDecorator:抽象装饰者装饰组件对象,其内部一定要有一个指向组件对彖的引用。在大多数情况下,该类为抽彖类,需要根据不同的装饰逻辑实现不同的具体子类。当然,如果是装饰逻辑单一,只有一个的情况下我们可以忽略该类直接作为具体的装饰者。oConcrete

5、DecoratorA和ConcreteDecoratorB:装饰者具体实现类对抽象装饰者的具体实现。在已冇的Component和ConcreteComponent体系下,实现装饰者模式来扩展原有系统的功能,可以分为5个步骤1.继承或者实现Component组件,生成一个Decorator装饰者抽彖类;2.在生成的这个Decorator装饰者类中,增加一个Component的私冇成员对象;3.将ConcreteComponent或者其他需要被装饰的对象传入Decorator类屮并赋值给上一步的Component对•象;4.在装饰者Decorator类中,将所有的操作都替换成该Co

6、mponent对彖的对应操作;5.在ConcreteDecorator类屮,根据需要对应覆盖需要重写的方法。装饰者模式在源码中用的也是非常多的,在Java和Android中都能够见到装饰者模式的影子:Java中的装饰者模式最典型的就是Java屮的java,io包下面的InputStream和OutputStream相关类了,初学Java的吋候,看到这些类,头都犬了,其实学了装饰者模式之后,再理解这些类就很简单了,画一个简单的类图來表示:InputStream类是一个抽象组件,F订clnputStrcam,StringBufforInputStream和ByteArrayInpu

7、tStream类都是可以被装饰者包起来的具体组件;FilterlnputStream是一个抽彖装饰者,所以它的四个子类都是一个个装饰者ToAndroid中的装饰者模式其次,对于android开发工程师来说,最最重要的就应该是"上帝类”Context和其子类了,这些类我就不用解释了,上一张类图基本就明确了:所以对于Application,Activity和Service等类来说,他们只是一个个装饰者,都是用来装饰ContextTmpl这个被装饰者类,Application是在crcatcBas

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。