• 装饰者模式


    1. 对象增强的手段

    • 继承
    • 装饰者模式
    • 动态代理(AOP)

    2. 继承

    2.1 特点
    • 增强的内容是固定的.
    • 被增强的对象也是固定的.
    class 果汁类{ }
    
    class 苹果汁类 extends 果汁类 { }
    
    class 葡萄汁类 extends 果汁类 { }
    
    class 柠檬汁类 extends 果汁类 { }
    
    class 苹果柠檬类 extends 柠檬类 { }
    
    class 葡萄柠檬类 extends 柠檬类 { }
    
    // 增强内容使固定的: 苹果汁类只能增强苹果汁.
    // 被增强的对象也是固定的: 增强的只能是果汁. 不能增强酒精类.
    

    3. 装饰者模式

    3.1 特点
    • 增强的内容是固定的.
    • 被增强的对象可以是任意的.
    // 葡萄柠檬苹果汁类
    
    果汁 A = new 苹果();
    果汁 B = new 柠檬(A); // 对 A 装饰, 就是在苹果汁中加入柠檬
    果汁 C = new 葡萄(B); // 对 B 装饰, 就是在苹果柠檬汁中加入葡萄
    
    // 增强内容是固定的: 苹果只能增加苹果味, 葡萄只能增加葡萄味.
    // 被增强的对象是任意的: 苹果可以增强酒精类.
    
    3.2 使用场景
    1. 不知道被增强对象的具体类型时,可以使用!!
    2. 是你还有你, 一切拜托你!!
    // dbcp 连接池的装饰者模式
    // 装饰的是 MySQL 驱动的 Connection 对象
    
    class MyConnection implements Connection{ // 是你
    
        // 还有你
        private Connection con;  // 底层对象, 被增强对象
    
        // 构造函数, 通过构造函数传递底层对象
        public MyConnection (Connection con){
            this.con = con;
        }
    
        // 一切拜托你, 大部分方法仍然直接调用被增强对象的方法
        public Statement createStatement(){
            return con.createStatement();
        }
    
        // 被增强部分
        public void close(){
            把当前连接归还给池.
        }
    }
    

  • 相关阅读:
    路由策略
    ospf 路由汇总
    OSPF type1 2
    ospf
    TCP 六种标识位
    raid 10 与 01
    SNMP协议
    ffmpeg剪切视频
    ubuntu18安装sbt
    服务器Ubuntu18重启后宝塔访问不了
  • 原文地址:https://www.cnblogs.com/linkworld/p/7624816.html
Copyright © 2020-2023  润新知