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

     
  • 相关阅读:
    每周总结⑤
    每周总结④——所遇问题
    Leetcode566. 重塑矩阵
    移动应用开发三种方式
    html5离线存储manifest
    拓端tecdat|python中的copula:Frank、Clayton和Gumbel copula模型估计与可视化
    拓端tecdat|R语言用极大似然和梯度下降算法估计GARCH(p)过程
    拓端tecdat|R语言Keras用RNN、双向RNNs递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感
    JAVA中CountDownLatch的简单示例
    网络编程基础篇
  • 原文地址:https://www.cnblogs.com/code-star/p/10567996.html
Copyright © 2011-2022 走看看