設(shè)計模式 一一一 策略模式

參考文檔:

策略模式(Strategy)

概念

對于一組算法,將每一個算法封裝到具有共同接口的獨(dú)立的類中,從而使得它們可以互相替換。

目的

環(huán)境僅依賴抽象策略,但是不依賴具體的某個策略,故可以做到在不改變環(huán)境的前提下,進(jìn)行策略的更換。

優(yōu)點(diǎn)

提供了管理一個算法族的解決方案,可以避免使用多重條件語句來判斷具體采用哪個算法。

缺點(diǎn)

客戶端必須知道所有的策略類,并自行決定使用哪一個策略類;策略模式會造成很多(策略)類。

角色

  • 環(huán)境(Context) :持有一個Strategy類的引用。
  • 抽象策略(Strategy):所有的具體策略類必須實(shí)現(xiàn)此接口。
  • 具體策略(ConcreteStrategy):包裝了相關(guān)的算法。

jdk中的策略模式

線程池拒絕策略

/**
 * 環(huán)境ThreadPoolExecutor:持有一個RejectedExecutionHandler類的引用
 */
public class ThreadPoolExecutor extends AbstractExecutorService {
    private volatile RejectedExecutionHandler handler;
}


/**
 * 抽象策略RejectedExecutionHandler
 */
public interface RejectedExecutionHandler {
    void rejectedExecution(Runnable r, ThreadPoolExecutor executor);
}

/**
 * 具體策略AbortPolicy
 */
public static class AbortPolicy implements RejectedExecutionHandler {
    public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
        throw new RejectedExecutionException("Task " + r.toString() + " rejected from " + e.toString());
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容