zoukankan      html  css  js  c++  java
  • 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成员变量引用的实例对象。

  • 相关阅读:
    React在componentDidMount里面发送请求
    React 术语词汇表
    React里受控与非受控组件
    React和Vue等框架什么时候操作DOM
    【LeetCode】79. Word Search
    【LeetCode】91. Decode Ways
    【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)
    【LeetCode】1. Two Sum
    【LeetCode】141. Linked List Cycle (2 solutions)
    【LeetCode】120. Triangle (3 solutions)
  • 原文地址:https://www.cnblogs.com/wanxi/p/6476240.html
Copyright © 2011-2022 走看看