• 技术文章 >Java >java教程

    Java 装饰者(Decorator)模式的实现案例

    黄舟黄舟2017-03-10 13:17:43原创703
    在Java中,io包下的很多类就是典型的装饰者模式的体现,如:

    new BufferedOutputStream(OutputStream out)
    new BufferedInputStream(InputStream in);
    new PrintWriter(OutputStream out)
    new FilterReader(Reader in);

    装饰类与被装饰的类 实现相同的接口,
    被装饰类,不关心具体是哪个实现类来装饰它,
    同样的业务方法,被装饰类调用装饰类的方法,增强装饰类的功能

    示例:

    类图



    public interface IReader {
    	void read();
    }
    public class Reader implements IReader {
    
    	@Override
    	public void read() {
    		System.out.println("read of Reader");
    	}
    
    }


    public class BufferedReader implements IReader {
    	
    	private IReader mReader;
    	public BufferedReader(IReader reader) {
    		this.mReader = reader;
    	}
    	
    	@Override
    	public void read() {
    		System.out.println("read of BufferedReader");
    		mReader.read();
    	}
    
    }


    /*
     * 特点:
     * (1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。
     (2) 装饰对象包含一个真实对象的引用(reference)
     (3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。
     (4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。
     在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。而装饰后,持有了真实对象,用以增强其功能。
    
     装饰者与适配器模式的区别
     关于新职责:适配器也可以在转换时增加新的职责,但主要目的不在此。装饰者模式主要是给被装饰者增加新职责的。
     关于其包裹的对象:适配器是知道被适配者的详细情况的(就是适配类)。装饰者只知道其接口是什么,
     至于其具体类型(是基类还是其他派生类)只有在运行期间才知道。
     
     */
    public class Test {
    	public static void main(String[] args) {
    		Reader reader = new Reader();
    		reader.read();
    		System.out.println("----------");
    		BufferedReader bufferedReader = new BufferedReader(reader);
    		bufferedReader.read();
    
    	}
    }

    以上就是Java 装饰者(Decorator)模式的实现案例的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Java 适配器(Adapter)模式的实现方法 下一篇:Java 代理(Proxy)模式实现的代码详解
    PHP编程就业班

    相关文章推荐

    • 详细解析Java集合框架• 深入了解java之CAS详解• Java理论基础--栈(总结分享)• 图文详解之Java实现冒泡排序• 详细介绍23种Java常见设计模式

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网