zoukankan      html  css  js  c++  java
  • 装饰器模式

    一、概述

    装饰器模式(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  

  • 相关阅读:
    (转) Linux下Setuid命令!
    Linux SWAP 交换分区配置说明(转)
    linux中ctime,mtime,atime的区别
    无法访问win8默认共享(如C$)解决办法
    Daemon进程
    autofs文件自动挂载系统
    Selinux相关
    解读linux中用户密码规则及忘记root口令的破解(思路)
    windows共享连接显示无法打开
    DOS口令启用停用的管理员密码
  • 原文地址:https://www.cnblogs.com/shiyun32/p/10821248.html
Copyright © 2011-2022 走看看