• java装饰模式


    在java的IO中就是运用装饰模式设计的。一层装饰一层

    如:DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.txt")));

    装饰模式的组成:1、抽象构件角色:相当java.io中的OutputStream或者是InputStream

    2、具体构件角色:相当于java.io中的FileInputStream或者是FileOutputStream

    3、抽象装饰角色:持有一个构件(Component)对象的引用,并定义一个与抽象构件接口一致的接口(即该角色继承或实现抽象构件角色)相当于java.io中的FilterInputStream或FilterOutputStream。

    4、具体装饰角色:负责给构件对象添加附加功能。相当于java.io的BufferedInputStream或BufferedOutputStream。

    代码实现如下:

    /**
    *定义抽象构件角色,并定义一个方法
    */
    public interface Component {
    
        public void doSomething();
    }
    /**
    * 定义具体构件角色,实现方法
    */
    public class ConcreteComponent implements Component {
    
        @Override
        public void doSomething() {
            System.out.println("FileInputStream");
        }
    
    }
    /**
     * 定义抽象装饰角色,持有构件对象的引用,并定义一个与抽象构件接口一致的接口(即该角色继承或实现抽象构件角色)
     * @author acer
     *
     */
    public class Derector implements Component{
    
        private Component component;
        
        public Derector(Component component){
            this.comonent = component;
        }
        
        @Override
        public void doSomething() {
            component.doSomething();
        }
    }
    /**
     * 定义具体装饰角色,并添加附加功能
     * @author acer
     *
     */
    public class ConcreteDerector1 extends Derector {
    
        
        public ConcreteDerector1(Compenent component) {
            super(component);
        }
    
        @Override
        public void doSomething() {
            super.doSomething();
            doAnything();
        }
        
        public void doAnything(){
            System.out.println("DataInputStream");
        }
    
    }
    /**
     * 装饰模式,客户端测试
     * 
     * @author acer
     *
     */
    public class Client {
        public static void main(String[] args) {
            Component component1 = new ConcreteComponent();
            
            
            Component component2 = new ConcreteDerector1(component1);//构建DataInputStream
            
            component2.doSomething();
        }
    }

    输出结果:

    FileInputStream
    DataInputStream

  • 相关阅读:
    yii2 分页
    yii2 钩子函数
    linux 配置compoer
    Python随心记--迭代器协议和for循环机制
    Python随心记--文件操作处理 open()
    Python随心记--练习
    Python随心记--函数式编程及常用内置函数,及部分实例
    Python随心记--匿名函数
    Python随心记--函数作用域
    Python随心记--局部变量与全局变量
  • 原文地址:https://www.cnblogs.com/hjy9420/p/5093048.html
Copyright © 2020-2023  润新知