• 装饰器模式


    一、概述

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。

    主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。

    何时使用:在不想增加很多子类的情况下扩展类。

    装饰器模型:

    装饰器和静态代理模式长得挺像的,注意区别。

    个人觉得,这两种方式的区别主要是在思想是有所区别,在形式上是没有区别的。

    二、使用步骤

    示例:

    package pattern.decorator;
    
    /**
     * 装饰器模式
     *
     * @author zls
     * @date 2020/3/26
     */
    public class DecoratorTest {
        public static void main(String[] args) {
            // 原有功能
            Car car = new Benz();
            car.run();
    
            // 被装饰的功能
            car = new RedBenzDecorator(car);
            car.run(); // 原来该咋调,还是咋掉,只不过功能增强了
        }
    }
    
    /**
     * 汽车公共接口
     */
    interface Car {
        void run();
    }
    
    /**
     * 汽车实现类--大奔
     */
    class Benz implements Car {
        @Override
        public void run() {
            System.out.println("大奔跑得快啊...");
        }
    }
    
    /**
     * 大奔的装饰器类
     * 需求:假设原有的大奔除了跑的功能以外,还有一个颜色的属性/方法
     */
    class RedBenzDecorator implements Car {
        private Car car; // 接口接收
    
        /**
         * 注入原有的对象
         * @param car
         */
        RedBenzDecorator(Car car) {
            this.car = car;
        }
    
        /**
         * 实现功能的增强(装饰):
         *    带有颜色的大奔再跑
         */
        @Override
        public void run() {
            this.red();
            car.run();
            // ... 省略一千行业务代码
        }
    
        /**
         * 颜色方法
         */
        public void red() {
            System.out.print("红色的");
        }
    }

    参考网址:

      https://www.runoob.com/design-pattern/decorator-pattern.html  

  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/shiyun32/p/10821248.html
Copyright © 2020-2023  润新知