Java装饰者模式】的更多相关文章

java 装饰者模式其实就是扩展子类的功能,和继承是一个性质. 但继承是在编译时就固定扩展了父类的一些功能,而装饰者模式是在运行过程中动态绑定对象,实现一个子类可以随时扩展功能. 将方法排列组合,也可以将其他子类的方法随时调用,但会new 出更多的对象. 个人感觉最核心的理解.自己做一下记录,代码晚上贴上.…
装饰者模式目标 把许多要实现的功能,加载在子类上,类的继承,显得很臃肿,装饰着模式是在不改变原有类文件和使用继承的情况下,通过创建一个包装对象动态地扩展一个对象的功能,相比生成子类更为灵活 装饰者模式角色 抽象组件角色 给出一个抽象接口 具体组件角色 定义一个将要增加附加功能的类,相当于父类 抽象装饰者角色 持有一个组件对象的实例,并且实现抽象组件接口 具体装饰者角色 负责给组件对象添加附加的功能,相当于子类 装饰者模式示例 以一件商品被卖出为例 //抽象组件角色 Commodity.java…
Java程序员们应该对java.io对不会陌生,因为java.io包采用了装饰器模式. 一.定义: Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样.因此,装饰器模式具有如下的特征: 它必须具有一个装饰的对象. 它必须拥有与被装饰对象相同的接口. 它可以给被装饰对象添加额外的功能. 用一句话总结就是:保持接口,增强性能. 装饰器通过包装一个装饰对象来扩展其功能,而又不改变其接口,这实际上是基于对象的适配器模式的一种变种.它与对象的适配器模式的异…
转载请注明出处:http://blog.csdn.net/zhaoyanjun6/article/details/56488020 前言 在上面的几篇文章中,着重介绍了Java 中常见的 IO 相关知识,在学习的过程中,发现 IO 包中是用了大量的装饰器模式,为了彻底的学习 IO,今天就来揭开装饰器模式的面纱. 为了弄明白装饰器模式的本质,我查看了很多资料,发现有很多文章要么说的很苦涩,要么举的例子不恰当. 其实我们可以这样理解装饰器模式, 就拿自己举例子,你把自己裸体的样子,想象成被装饰的对象…
一.定义 装饰模式的设计理念主要是以对客户端透明的方式动态扩展对象的功能,是继承关系的一个替代(继承会产生大量的子类,而且代码有冗余).装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展.装饰模式把客户端的调用委派到被装饰类.装饰模式的关键在于这种扩展完全是透明的(装饰模式的透明性要求客户端程序不应该将对象声明为具体构件类型或具体装饰类型,而应该全部声明为抽象构件类型),装饰模式的应用在java的I/O流中最为显著. 二.角色 抽象构件角色(Component):通常是一个抽象类或者一个…
装饰者模式可以动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 该模式的适用环境为: (1)在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. (2)处理那些可以撤消的职责. (3)当不能采用生成子类的方法进行扩充时.一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长.另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类. 实现该模式的关键步骤: (1)Component(被装饰对象基类…
一.概念 我们在使用以前既定的类或者使用别人使用的类的时候,如果该类的方法,不满足你的需求的时候,需要你进行额外附加功能的时候,往往我们想到的方法是继承实现, 但是继承会导致类的越来越庞大,有什么好的方法呢?装饰者模式(也称静态代理). 就是在不破坏原类的结构的基础上,对现有类附件额外功能. 条件: 1 )继承同一个类或者实现同一个接口. 2)装饰者要有被装饰者的引用. 3)需要增强的方法,对其增强,不需要增强的方法调用原先的方法. 例子: 共同继承的接口: package com.jd.dec…
图1 装饰者模式[点击查看图片] 1,一个简单的以人为主体的装饰者模式 被装饰者 public interface Human {//被装饰者 public void wearClothes(); public void walkToWhere(); } //定义被装饰者,被装饰者初始状态有些自己的装饰 class Person implements Human { @Override public void wearClothes() { // TODO Auto-generated meth…
目录 1.实现装饰器模式 1.1.公共接口 1.2.接口实现 1.3.装饰器 1.4.装饰构件 1.5.测试装饰器 上图展示的是io流中的一个装饰者模式的代码结构 1.实现装饰器模式 汽车厂生产汽车实例,4S店可以喷漆换颜色. 1.1.公共接口 public interface Car { void skin(); } 1.2.接口实现 实现汽车出厂色 public class Corolla implements Car { @Override public void skin() { Sys…
定义:在不改变原有对象的基础上,将功能附加到对象自上 提供了比继承更有弹性的替代方案(扩展原有对象功能) 类型:结构型 扩展一个类的功能或给一个类添加附加职责 动态的给一个对象添加功能,这些功能可以再动态的撤销 继承的有力补充,比继承灵活,不改变原有对象的情况下给一个对象扩展功能 通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果 缺点: 会出现更多的代码,更多的类,增加程序复杂性 动态装饰时,多层装饰时会更加复杂 public abstract class ABattercake {…
对已有功能进行增强 示例 已有的类    调用 增强后的类 调用  思考? 为什么要这么做呢? SuperPerson 继承 Person 可以达到同样的效果. 继承的写法,其中MyBuffer...Reader写了3次,如果有更多的话,还会写更多的类.有些臃肿 第一次优化:将MyBuffer抽离出来 再看,利用多态实现多种方法 最终的结构.MyBufferReader 成为了增强的装饰类.就是装饰设计模式 对比原来的结构,是不是舒服很多 vs  看完这个再回过头看开始时候的示例.是不是就能够理…
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固定的流程编写出流水式的代码外,很难去思考整套功能服务的扩展性和可维护性.尤其是在一些较大型的功能搭建上,比较缺失一些驾驭能力,从而导致最终的代码相对来说不能做到尽善尽美. 江洋大盗与江洋大偷 两个本想描述一样的意思的词,只因一字只差就让人觉得一个是好牛,一个好搞笑.往往我们去开发编程写代码时也经常将…
Java装饰者模式简介 一.假设有一个Worker接口,它有一个doSomething方法,Plumber和Carpenter都实现了Worker接口,代码及关系如下: 1.Worker.java package decorator; public interface Worker { public void doSomething(); } 2.Plumber.java public class Plumber implements Worker { @Override public void…
刚开始接触装饰者的设计模式,感觉挺难理解的,不够后来花了一个晚上的时间,终于有头绪了 装饰者设计模式:如果想对已经存在的对象进行装饰,那么就定义一个类,在类中对已经有的对象进行功能的增强或添加另外的行为,这个类就叫装饰者类.被修饰的类叫被装饰者类,是已经存在有的功能.在装饰者类之间又可以互相装饰 特点:          1.装饰类通过构造方法来接收被装饰者的对象,调用它里面的功能或行为          2. 基于对被装饰对象的功能进行扩展,提供更强大的功能 Java中的IO流是典型的装饰者模…
装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生子类来扩展,抑或是使用对象组合的方式.显然,直接修改对应的类的方式并不可取,在面向对象的设计中,我们应该尽量使用组合对象而不是继承对象来扩展和复用功能,装饰器模式就是基于对象组合的方式的. 装饰器模式以对客户端透明的方式动态地给一个对象附加上了更多的责任.换言之,客户端并不会角色对象在装饰前…
用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式. 结构…
装饰模式(Decorator) 装饰模式又名包装(Wrapper)模式. 装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式通过创建一个包装对象,也就是装饰,来包裹真实的对象. 装饰模式以对客户端透明的方式动态地给一个对象附加上更多的责任.换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同. 装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展. 装饰模式把客户端的调用委派到被装饰类.装饰模式的关键在于这种扩展是完全透明的. 装饰模式的角色 抽象构件角色(…
设计模式(Design Pattern) 1.是一套被反复使用.多人知晓的,经过分类编目 的 代码设计经验总结.使用设计模式是为了可重用代码,让代码更容易维护以及扩展. 2.简单的讲:所谓模式就是得到很好研究的范例,设计模式就是设计的范例,更方便学习交流. 3.模式不是框架,也不是过程,模式也不是简单的问题的解决方案,因为模式必须是典型问题的解决方案,是可以让学习者举一反三,有研究价值.有交流价值.有自己名字的例子. 4.模式不能套用,不要以为在任何一个系统中都要使用某些设计模式,系统的设计也不…
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式. 结构…
package shb.java.demo; /** * 测试装饰者模式 * @package :shb.java.demoJava02 * @author shaobn * @Describe : * @Time: 2015-9-9 上午12:17:00 */ public class TestDecrator { /** * @author shaobn * @Describe : * @param args * @Time : 2015-9-9 上午12:16:49 */ public s…
1. Java之装饰器模式(Decorator Pattern) (1)概述:     装饰模式在Java种使用也很广泛,比如我们在重新定义按钮.对话框等时候,实际上已经在使用装饰模式了.在不必改变原类文件和使用继承的情况下,装饰模式使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一,它是通过创建一个包装对象,也就是装饰来包裹真实的对象.     装饰者模式:动态地给一个对象添加一些额外的职责,就像在墙上刷油漆一样.就增加功能来说,Decorator模式比生成…
流概述 Java中,流是一种有序的字节序列,可以有任意的长度.从应用流向目的地称为输出流,从目的地流向应用称为输入流. Java的流族谱 Java的 java.io 包中囊括了整个流的家族,输出流和输入流的谱系如下所示: InputStream和OutputStream InputStream和OutputStream分别是输入输出流的顶级抽象父类,只定义了一些抽象方法供子类实现. 在输出流OutputStream中,如果你需要向一个输出流写入数据,可以调用 void write(int b)…
装饰者: Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案. 装饰者模式意图: 动态的给一个对象添加额外的职责.Decorator比生产子类灵活. 设计原则: 多用组合,少用继承. 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为.然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展 类应设计的对扩展开放,对修改关闭. 要点: 1.装饰者和被装饰对象有相同的超类型. 2.可…
装饰者模式(Decorator Pattern) Java的IO类 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26716823 装饰者模式(decorator pattern)參见: http://blog.csdn.net/caroline_wendy/article/details/26707033 Java的IO类使用装饰者模式进行扩展, 当中FilterInputStream类, 就是装饰者(decorato…
在Java在.io反映非常多类包下是典型的装饰格局,例如: new BufferedOutputStream(OutputStream out) new BufferedInputStream(InputStream in); new PrintWriter(OutputStream out) new FilterReader(Reader in); 装饰类与被装饰的类 实现同样的接口, 被装饰类.不关心详细是哪个实现类来装饰它, 相同的业务方法,被装饰类调用装饰类的方法,增强装饰类的功能 演示…
要实现装饰者模式,注意一下几点内容: 1.装饰者类要实现真实类同样的接口 2.装饰者类内有一个真实对象的引用(可以通过装饰者类的构造器传入) 3.装饰类对象在主类中接受请求,将请求发送给真实的对象(相当于已经将引用传递到了装饰类的真实对象) 4.装饰者可以在传入真实对象后,增加一些附加功能(因为装饰对象和真实对象都有同样的方法,装饰对象可以添加一定操作在调用真实对象的方法,或者先调用真实对象的方法,再添加自己的方法) 5.不用继承,   先用实例说话,最后再具体装饰者模式   假设要制造添加甜蜜…
顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下: [java] view plaincopy public interface Sourceable { public void method(); } [java] view plaincopy public class Source im…
定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的. 要点: 装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为 实际上Java 的I/O API就是使用Decorator实现的. //定义被装饰…
字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在写入一个字符时,Java虚拟机会将字符转为文件指定的编码(默认 是系统默认编码),在读取字符时,再将文件指定的编码转化为字符. 常见的码表如下: ASCII:           美国标准信息交换码.用一个字节的7位可以表示. ISO8859-1:   拉丁码表.欧洲码表,用一个字节的8位表示.又称…
本文写在po主初学JAVA时,在学习inputStream摸不着头脑,受Java IO-InputStream家族 -装饰者模式一文启发,所以在理清思路时写下本文.因为初学,如有错误,望指正. 因为和输入流与之对应的还有输出流(即OutputStream),在此只针对输入流InputStream讨论. 1. 家族老大: 一说起家族中的老大,InputStream自然是当仁不让,在java的输入流操作的类中,衍生出的基本子类有,可以理解为这些都是InputStream它的孩子(子类): Input…