• Java设计模式概述之结构型模式(装饰器模式)


    三、装饰器模式

    在Java中,装饰器模式使用场景非常普遍,例如BufferedInputStream就利用了装饰器模式。

    装饰器模式与代理模式非常相似,相似点可总结如下:

    1、都是对原始类功能、特性的增强。
    2、都是通过注入原始类来实现类的增强。
    3、其增强原始类的方式都是非侵入的,可插拔的。
    4、被扩展后的代码具有良好的扩展性。

    当然,不同点如下:

    1、注入方式不同。装饰器模式是通过其构造方法接受原始类的实例的引用注入;代理模式是通过内部自动创建原始类的实例。
    2、扩展性不同。装饰器模式可以利用多态性来实现增强指定类的功能;代理模式只能针对固定类。装饰器模式的扩展性更强。

    装饰设计模式示意图:

    这里写图片描述

    代码:

    /**
     * @author Hanlin Wang
     */
    
    public class DecoratorMode {
        public static void main(String[] args) {
            A a = new A();
            Decorator decorator = new Decorator(a);
            decorator.run();
        }
    }
    
    //定义装饰类
    class Decorator implements C1{
        private C1 c;
        public Decorator(C1 c){
            this.c = c;
        }
        public void run(){
            System.out.println("before");
            c.run();
            System.out.println("after");
        }
    }
    
    //定义被装饰类装饰的类
    class A implements C1{
        public void run(){
            System.out.println("A's running");
        }
    }
    
    //定义A类实现的接口
    interface C1{
        void run();
    }

    Decorator为装饰器类,A为原始类,C1为公共接口,接口中有一个run方法。Decorator、A都实现C1接口的run方法。Decorator类中定义了私有的A类的成员变量a,并自定义了构造函数public Decorator(A a)用于注入a成员变量引用的实例对象。

  • 相关阅读:
    html自定义加载动画
    数据结构与算法:贪心算法简介
    WEB 前端常用字体和色值你知道多少?
    为什么浮点精度运算会有问题
    Java 字符串格式示例
    使用 Java 和 Maven (JBake) 生成静态网站
    硅谷钢铁侠
    Flink中的5种窗口使用场景
    prometheus-operator监控k8s资源
    fluentd收集k8s集群pod日志
  • 原文地址:https://www.cnblogs.com/wanxi/p/6476240.html
Copyright © 2020-2023  润新知