zoukankan      html  css  js  c++  java
  • Java设计模式之装饰器模式

    1.装饰器模式的定义(保持接口,扩展功能)

      Decorate装饰器,顾名思义,就是动态的给一个对象添加一些额外的职责,就好比对房子进行装修一样。

    2.装饰器模式的特征

      具有一个装饰对象。

      必须拥有与被装饰对象相同的接口。

      可与给被装饰对象添加额外的功能。

    3.装饰器模式的典型应用,java.io包

    4.装饰器模式的代码示例

    /**
     * @Author long
     * @Date 2019/3/20 21:29
     */
    public interface SourceAble {
    
        void operation();
    }
    /**
     * @Author long
     * @Date 2019/3/20 21:31
     */
    public class Source implements SourceAble {
    
        @Override
        public void operation() {
            System.out.println("Source最原始的方法");
        }
    }
    /**
     * @Author long
     * @Date 2019/3/20 21:32
     */
    public class SourceDecorateA implements SourceAble {
    
        private SourceAble sourceAble;
    
        public SourceDecorateA(SourceAble sourceAble){
            this.sourceAble = sourceAble;
        }
    
        @Override
        public void operation() {
            System.out.println("SourceDecorateA before");
            sourceAble.operation();
            System.out.println("SourceDecorateA after");
        }
    }
    /**
     * @Author long
     * @Date 2019/3/20 21:34
     */
    public class SourceDecorateB implements SourceAble {
    
        private SourceAble sourceAble;
    
        public SourceDecorateB(SourceAble sourceAble){
            this.sourceAble = sourceAble;
        }
    
        @Override
        public void operation() {
            System.out.println("SourceDecorateB before");
            sourceAble.operation();
            System.out.println("SourceDecorateB after");
        }
    }
    /**
     * @Author long
     * @Date 2019/3/20 21:48
     */
    public class App {
    
        public static void main(String[] args) {
            SourceAble source = new Source();
            source.operation();
            System.out.println("================");
            SourceAble decorateA = new SourceDecorateA(source);
            decorateA.operation();
            System.out.println("================");
            SourceAble decorateB = new SourceDecorateB(decorateA);
            decorateB.operation();
        }
    }

    Source最原始的方法
    ================
    SourceDecorateA before
    Source最原始的方法
    SourceDecorateA after
    ================
    SourceDecorateB before
    SourceDecorateA before
    Source最原始的方法
    SourceDecorateA after
    SourceDecorateB after

     
  • 相关阅读:
    数据结构-第5章学习小结
    数据结构-第4章学习小结
    数据结构-第3章学习小结
    数据结构-第2章学习小结
    数据结构-第1章学习小结
    实验五 单元测试
    实验四 代码评审
    实验三 UML建模工具的安装和使用
    实验二 结对编程 (第二阶段)
    结对编程实验 第一阶段
  • 原文地址:https://www.cnblogs.com/code-star/p/10567996.html
Copyright © 2011-2022 走看看