设计模式 一一一 策略模式

参考文档:

策略模式(Strategy)

概念

对于一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以互相替换。

目的

环境仅依赖抽象策略,但是不依赖具体的某个策略,故可以做到在不改变环境的前提下,进行策略的更换。

优点

提供了管理一个算法族的解决方案,可以避免使用多重条件语句来判断具体采用哪个算法。

缺点

客户端必须知道所有的策略类,并自行决定使用哪一个策略类;策略模式会造成很多(策略)类。

角色

  • 环境(Context) :持有一个Strategy类的引用。
  • 抽象策略(Strategy):所有的具体策略类必须实现此接口。
  • 具体策略(ConcreteStrategy):包装了相关的算法。

jdk中的策略模式

线程池拒绝策略

/**
 * 环境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());
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容