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

    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(){
            把当前连接归还给池.
        }
    }
    

  • 相关阅读:
    泛型类,泛型方法的使用
    Mapper注解与MapperScan注解
    Configuration注解
    LA 4254 Processor (二分 + 贪心)
    UVa 10382 Watering Grass (贪心 区间覆盖)
    UVA 10795 A Different Task (递归)
    LA 3401 Colored Cubes (搜索 + 暴力)
    uva11464 Even Parity (枚举+递推)
    icpc2021 昆明 K (dfs爆搜)
    hdu3533 (bfs + 模拟)
  • 原文地址:https://www.cnblogs.com/linkworld/p/7624816.html
Copyright © 2011-2022 走看看