• 装饰模式/decorator模式/结构型模式


    装饰模式Decorator

    定义

    为对象动态的增加新的功能,实现要求装饰对象和被装饰对象实现同一接口或抽象类,装饰对象持有被装饰对象的实例。

    java实现要点

    1. 定义一个接口或抽象类,作为被装饰者的抽象
    2. 对1定义的抽象,进行具体的实现,作为装饰者,装饰者的构造函数传入1的实例,并持有。
    3. 装饰者对持有的被装饰者进行装饰

    代码示例

    
    //定义共同的接口
    public interface Resizable {  
        public void resize();  
    } 
    //被装饰者为接口的任意实现
    public class Source implements Resizable {  
        @Override  
        public void resize() {  
            System.out.println("the original method!");  
        }  
    } 
    //装饰者对接口的任意实现进行装饰
    public class Decorator implements Resizable {  
        private Resizable source;  
        public Decorator(Resizable source){  //构造器注入被装饰对象
            super();  
            this.source = source;  
        }  
        @Override  
        public void method() {  //实现接口方法,并对被装饰者进行装饰
            System.out.println("before decorator!");  
            source.resize();  
            System.out.println("after decorator!");  
        }  
    }  
    

    JDK中的装饰模式

    java.io包中流的设计,是装饰模式的经典之作。具体为(以输入流为例):

    1. 定义抽象父类InputStream
    2. 然后对InputStream进行具体实现:ByteArrayInputStream、FileInputStream、ObjectInputStream等
    3. 其中FilterInputStream的又有其子类,分别是:BufferedInputStream、DataInputStream等,FilterInputStream什么也没做,仅仅是调用抽象父类InputStream的方法(委托)。
    4. 最终各具体实现类,实现装饰一个InputStream,为它添加它原本不具有的功能。
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("/home/user/abc.txt")));
    //对任意InputStream实现类的装饰
    InputStream in=new BufferedInputStream(new DataInputStream(new ObjectInputStream(new FileInputStream("d:hello.txt"))));
    


    I am a slow walker, but I never walk backwards.



  • 相关阅读:
    转:套接字
    转:Socket原理与编程基础
    转:rabbitmq——用户管理
    转:rabbitMQ 安装与管理
    转:window与linux互相拷贝文件
    转:Xming + PuTTY 在Windows下远程Linux主机使用图形界面的程序
    Rabbitmq集群
    VS2010 win7 64位安装后新建项目生成时错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    java连接sqlserver2008
    Java单体应用
  • 原文地址:https://www.cnblogs.com/lknny/p/5802117.html
Copyright © 2020-2023  润新知