我们都知道继承是对一个类功能的扩展,但是这种扩展在编译的时候已经定死了,是一种静态的扩展。
而装饰模式是对对象功能的扩展,不对类功能扩展,就比如说,从硬盘读取数据字节流这个基本的功能,在java io 中只是在InputStream这个接口中定义的。这个类中有最基础的方法就是read方法,如果用FileInputStream这个类的对象去封装InputStream的对象,那么制造出来的对象就有了从硬盘上读取文件的功能,如果再用BufferedInpuStream对象去封装FileInputStream对象,那么制造出来的对象就有了从磁盘上读取文件带缓冲功能,如果用DataInputStream对象去封装BufferedInputStream对象那么制造出来的对象就有了“带缓冲功能的从磁盘文件读取java中类型的功能。写到这里你应该有点明白了吧。这个java 程序代码就是:
InputStream is = new FileInputStream(“d:\\hello.txt”);//注意FileInputStream是节点流
BufferedInputStream bis = newBufferedInputStream(is);//注意BufferedInputStream流是过滤流
DataInputStream dis = newDataInputStream(bis);//DataInputStream也是过滤流
此时的dis带有三种功能,读取文件,带缓冲,读取java中类型。
下面是仿照java io中的装饰模式例子:
1,首先我们定义一个接口,这个接口中只定义一个具有最基本的功能的函数。
package com.supan.zhuangshipattern;
public interface BaseInterface {
public void doSomething();
}
2, 定义一个基本的类去实现这个最基本的功能。
package com.supan.zhuangshipattern;
public class BaseInterfaceImp implements BaseInterface {
public void doSomething() {
System.out.println("这是实现基本接口后的---基本功能");
}
}
3,下面我们来定义封装模式中最重要的一个类
package com.supan.zhuangshipattern;
public class MyFilter implements BaseInterface {
BaseInterface bi;
public MyFilter(BaseInterface bi) {
this.bi = bi;
}
public void doSomething() {
bi.doSomething();
}
}
特别注意:
1,它实现了定义最基本功能的那个接口,证明这个类具有我们所说的最基本的功
能。
2,它持有实现具有最基本功能接口类的对象的引用,这个引用就是让该类具有最基本的功
能,因为它靠这个引用来做最基本的功能。
4,创造第一个装饰类
package com.supan.zhuangshipattern;
public class ExtendFilter1 extends MyFilter {
public ExtendFilter1(BaseInterface bi) {
super(bi);
}
public void doSomething(){
bi.doSomething();
doAnthing();
}
public void doAnthing(){
System.out.println("这是封装增加的第一个功能");
}
}
5,创建第二个装饰类
package com.supan.zhuangshipattern;
public class ExtendFilter2 extends MyFilter {
public ExtendFilter2(BaseInterface bi) {
super(bi);
}
public void doSomething(){
bi.doSomething();
doAnthing();
}
public void doAnthing(){
System.out.println("这是封装后的增加的第二个功能---");
}
}
6,创建测试类
package com.supan.zhuangshipattern;
public class TestZhuangshi {
public static void main(String[] args) {
BaseInterface bi = new BaseInterfaceImp();
ExtendFilter2 et2 = new ExtendFilter2(new ExtendFilter1(bi));
et2.doSomething();
}
}
打印结果:
这是实现基本接口后的---基本功能
这是封装增加的第一个功能
这是封装后的增加的第二个功能---
分享到:
相关推荐
动态地给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类方式更为灵活。
树形结构的处理——组合模式(二) 树形结构的处理——组合模式(三) 树形结构的处理——组合模式(四) 树形结构的处理——组合模式(五) 装饰模式-Decorator Pattern 扩展系统功能——装饰模式(一) 扩展系统...
装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...
Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现 VS2012 下通过
主要介绍了java 装饰模式(Decorator Pattern)详解的相关资料,需要的朋友可以参考下
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装
Laravel应用中的装饰器模式 用 :red_heart: 用于智能清洁编码器 尝试将“装饰器”功能从python语言移植到laravel框架。 :delivery_truck: 安装 : composer require imanghafoori/laravel-decorator 什么是...
主要为大家详细介绍了java装饰模式Decorator Pattern,这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装,对装饰器模式感兴趣的小伙伴们可以参考一下
在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式...[GOF《设计模式》]图1Decorator模式结构图装饰模式动态地给一个对象添加额外的职责。不论一幅画有没有画
主要为大家详细介绍了java实现装饰器模式Decorator Pattern,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了C#装饰器模式(Decorator Pattern),以一个完整实例形式讲述了C#装饰器模式的实现过程,有助于深入理解C#程序设计思想,需要的朋友可以参考下
备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) ...装饰模式(Decorator Pattern) 状态模式(State Pattern) 组合模式(Composite Pattern)
四、 装饰模式应当在什么情况下使用 五、 装饰模式实际应用的例子 六、 使用装饰模式的优点和缺点 七、 模式实现的讨论 八、 透明性的要求 九、 装饰模式在.NET中的应用 C#设计模式(13)-Proxy Pattern 一...
装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令...
java 设计模式 源码 欢迎访问DesignPattern项目 ...装饰器模式(decoratorPattern) 外观模式(facadePattern) 享元模式(flyweightPattern) 代理模式(proxyPattern) 责任链模式(chainPattern) 命令模式(commandPatter
设计模式面面观(12):装饰模式(Decorator Pattern)-结构型模式
装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令...
四、 装饰模式应当在什么情况下使用 106 五、 装饰模式实际应用的例子 106 六、 使用装饰模式的优点和缺点 110 七、 模式实现的讨论 111 八、 透明性的要求 111 九、 装饰模式在.NET中的应用 112 C#设计模式(13)-...
13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21...