欢迎来到天天文库
浏览记录
ID:32435875
大小:240.97 KB
页数:7页
时间:2019-02-04
《设计模式总结-装饰都模式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、注:文档内容基本上来自于网上,并加上自己的理解而成。有的觉得网友总结得非常好,就完全照搬下来,供学习之用。然而,有的摘抄并没有加上原链接和出处,请谅解。使用非继承方式动态的给一个对像增加功能,这种方式在程序运行阶段才动态为其增加功能,故非常灵活。特点:1.装饰者和被装饰者拥有共同的超类。2.装饰者有一个成员变量,指向被装饰者实例。被装饰者实例以参数形式传入装饰者。3.执行时动态决定被装饰对像,比使用继承方式更加灵活。==========================================================
2、==========================要点:1.特点和本质:动态的给一个对像增加功能。2.应用场景:3.C++/JAVA实现装饰者模式定义:动态的给一个对像增加其它职责(Responsibility)。就增加对像功能来说,装饰者比生成子实现类更加灵活。装饰者模式,也叫包装器(Wrapper)模式。它的主要用途,是在不改变一个类的代码、也不改变它的继承体系的前提下,为这个类增加功能。当你可能想为一个类增加更多功能时,使用装饰者模式意味着你的新版本的代码不必通过继承这个类来重用现有的功能。在动态的增加功能时,为什么装饰者
3、模式比生成子类更加灵活?我想这是因为被装饰者是在装饰者实例产生的时候动态的以参数的方式传给装饰者的,而继承是在编译阶段就已经确定,而以聚合的方式在运行时动态进行扩展当然也就更加灵活。装饰者提供了比继承更有弹性的替代方案。(配合JAVAIOAPI一起理解)装饰者模式分类: 读书笔记之设计模式2012-02-0318:21 221人阅读 评论(0) 收藏 举报利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都继承到相同的行为。然而,如果能够利用聚合的做法扩展对象的行为(通过参数的方式把被装饰者传给装饰者),就可以在运行时动
4、态地进行扩展。通过动态地组合对象,可以写新的代码添加新功能,而无须修改现有代码。既然没有改变现有代码,那么引进bug或产生意外副作用的机会将大幅度减少。 设计原则 类应该对扩展开发,对修改关闭。装饰者模式动态地将责任附加到对象上。若需要扩展功能,装饰者提供了比继承更有弹性的替代方案。 装饰者和被装饰者必须是一样的类型,也就是有共同的超类,这是相当关键的地方。在这里,我们利用继承达到了“类型匹配”,而不是利用继承获得“行为”。当我们将装饰者和组件组合时,就是在加入新的行为(这里虽然没有新的方法,比如星巴克中的cost方法)。所得到
5、的新的行为,并不是继承自超类,而是由组合对象得到的。我个人的理解觉得有点利用超类型同样来递归调用的意思。 比如在上面的图中,ConcreteDecoratorA有一个Component类型的ConcreteComponent实例,这个实例是在ConcreteDecoratorA实例的创建时候以参数传给构造函数的。然后再在ConcreteDecoratorA中增加功能。比如:DataInputStream(InputStream in) Createsa DataInputStream thatusesthespecifiedund
6、erlyingInputStream.DataInputStream在实例化的时候必须以一个InputStream实例为参数,而InputStream实例就是所谓的被装饰者了,而DataInputStream就是装饰者java设计中很经典的装饰者模型,java.io类。细说下java的io设计 JavaI/O库具有两个对称性,它们分别是: 1 输入-输出对称性,比如InputStream和OutputStream各自占据Byte流的输入与输出的两个平行的等级结构的根部。而Reader和Writer各自占据Char流的输入与输出的
7、两个平行的等级结构的根部。 2 byte-char对称,InputStream和Reader的子类分别负责Byte和Char流的输入;OutputStream和Writer的子类分别负责Byte和Char流的输出,它们分别形成平行的等级结构。 JavaI/O库的两个设计模式: Java的I/O库总体设计是符合装饰者模式(Decorator)跟适配器模式(Adapter)的。如前所述,这个库中处理流的类叫做流类。引子里所谈到的FileInputStream,FileOutputStream,DataInputStream及Da
8、taOutputStream都是流处理器的例子。 1 装饰者模式:在由InputStream,OutputStream,Reader和Writer代表的等级结构内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的,具有改善了的功能的流处
此文档下载收益归作者所有