【小知识】小例子说明Spring的核心思想之一:控制反转。

装饰设计模式:使用频率很高!!!

  目的:改写已存在的类的某个方法或某些方法,使方法增强了。装饰设计模式(也即包装设计模式)
  口诀:

    1、编写一个类,实现与被包装类相同的接口。(这样他们就具备了相同的行为
    2、定义一个被包装类类型的变量,即引用,用于接收被包装的对象。
    3、定义构造方法,把被包装类的对象注入,给被包装类变量赋值。(因为后面我要用该包装类的对象,所以要注入进来
    4、对于需要改写的方法,写自己的代码。(若重写方法的时候,还需要用到其他类的对象,那我们就在构造方法中继续注入即可)
    5、对于不需要改写的方法,使用被包装类对象调用原有的方法。

  示例代码如下:

// 注意:该类本身就是一个装饰类,对原类的具体装饰饰在该类中实现。(但是需要写很多多余的代码)
public class MyConnection implements java.sql.Connection // 1、编写一个类,实现与被包装类相同的接口。(具备相同的行为)

    // 2、定义一个被包装类类型的变量,即引用,用于接收被包装的对象。
    private java.sql.Connection conn; // 同时也是要注入的东西

    // 定义我们缺的池子
    private List<Connection> pool; // 这是我们缺的池子

    // 3、定义构造方法,把被包装类的对象注入,给被包装类变量赋值。也把我们需要的池子给注入。
    // 注入的对象可以是com.mysql.jdbc.Connection,也可以是com.oracle.jdbc.Connection,即不同的控制权
    public MyConnection(com.mysql.jdbc.Connection conn, List<Connection> pool) // 对被包装的对象和池子进行构造初始化
        this.conn = conn;
        this.pool = pool;
    }

    // 4、对于需要改写的方法,写自己的代码。
    @Override
    public void close() throws SQLException {
        pool.addLast(conn); // 还回数据库连接池中,但是呢我们缺少池子,那么我们就要注入一个池子(依赖注入)
    }

    // 5、对于不需要改写的方法,使用被包装类对象调用原有的方法。注意:不需要改写代码有很多啊!省略了。
    @Override // 以下有很多,比如:
    public void submit() {
        conn.submit(); // conn就是我们注入的对象
    }

    @Override
    public PreparedStatement prepareStatement(String sql) throws SQLException {
        return conn.preparedStatement(sql); // conn就是我们注入的对象
    }

    @Override
    // ......
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpspdj.html