commons-pool2源碼走讀(二) 對象工廠PooledObjectFactory接口

commons-pool2源碼走讀(二) 對象工廠PooledObjectFactory <T> 接口

PooledObjectFactory <T> 顧名思義是一個池對象的工廠類,通過該類獲得一個池對象的包裝類PooledObject<T> 同時該接口還定義了對池對象的一些操作,比如校驗、銷燬、激活、卸載。下面來看看其接口的具體定義和實現。

1. 接口定義

public interface PooledObjectFactory<T> {
    //創建
    PooledObject<T> makeObject() throws Exception;

    //銷燬
    void destroyObject(PooledObject<T> p) throws Exception;

    //驗證
    boolean validateObject(PooledObject<T> p);

    //激活
    void activateObject(PooledObject<T> p) throws Exception;

    //卸載(鈍化)
    void passivateObject(PooledObject<T> p) throws Exception;
}

該工廠接口定義的方法,完整覆蓋了一個池對象,在池中的整個生命週期需要經歷的步驟。再回顧下這些操作在池對象的生命週期的什麼時候發生:
這裏寫圖片描述

2. 抽象空實現BasePooledObjectFactory<T>

該抽象類定義如下:

public abstract class BasePooledObjectFactory<T> extends BaseObject implements 
PooledObjectFactory<T> {
    public abstract T create() throws Exception;

    public abstract PooledObject<T> wrap(T obj);

    @Override
    public PooledObject<T> makeObject() throws Exception {
        return wrap(create());
    }

    @Override
    public void destroyObject(final PooledObject<T> p)
        throws Exception  {
        // The default implementation is a no-op.
    }

    @Override
    public boolean validateObject(final PooledObject<T> p) {
        return true;
    }

    @Override
    public void activateObject(final PooledObject<T> p) throws Exception {
        // The default implementation is a no-op.
    }

    @Override
    public void passivateObject(final PooledObject<T> p)
        throws Exception {
        // The default implementation is a no-op.
    }
}

BasePooledObjectFactory<T> 只是PooledObjectFactory<T> 的一個空實現,同時抽象出 create()和 wrap(T obj);方法,是工廠的定義更加貼切,畢竟創建的對象是T對象而不是包裝類。

3.自定義實現

該接口需自行實現,可以實現PooledObjectFactory <T> 或者繼承BasePooledObjectFactory<T> 顯然二者沒有明顯的區別。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章