A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 余大麻 于 2019-3-21 11:26 编辑

装饰设计模式
  • 专门为解决某一类问题,而编写的固定格式的代码
  • 装饰者固定结构:接口A,已知实现类C,需要装饰者创建代理类B
  • 创建B,并实现A接口
  • 提供B类的构造方法,参数类型为A,用于接收A接口的实现类C
  • 给类B添加类型为A的成员变量,用于存放A接口的其他实现类
  • 增强需要的方法
  • 实现不需要增强的方法,方法体重调用成员变量存放的其他实现类对应的方法
  • A接口的实现类C作为参数传递,需要增强C的某个方法,创建A接口实现类B包裹C,修改该方法,然后把B替代C作为参数传递
[Java] 纯文本查看 复制代码
A a = c;
B b = new B(c);
class B implement A {
    private A a;
    public B(A a)  {
        this.a = a;
    }
    //需要增强的方法
    public void close() {
        ...    
    }
    //需要增强的方法
    public void commit() {
        ...
    }
}


[Java] 纯文本查看 复制代码
//1.实现同一个接口Connection
public class MyConnection implements Connection {
    //3.定义一个变量
    private Connection conn;
    private LinkedList<Connection> pool;
    // 2.编写一个构造方法(参数使用了面相对象的多态特性)
    public MyConnection(Connection conn,LinkedList<Connection> pool) {
        this.conn=conn;
        this.pool=pool;
    }
    //4.书写需要增强的方法
    @Override
    public void close() throws SQLException {
        pool.add(conn);
    }
    /**
     * 此方法必须覆盖!否则会出现空指针异常!!!
     */
    @Override
    public PreparedStatement prepareStatement(String sql) throws SQLException {
        return conn.prepareStatement(sql);
    }
}




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马