美文网首页
设计模式 一一一 策略模式

设计模式 一一一 策略模式

作者: 不二不二熊 | 来源:发表于2020-07-28 19:27 被阅读0次

    参考文档:

    策略模式(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());
        }
    }
    

    相关文章

      网友评论

          本文标题:设计模式 一一一 策略模式

          本文链接:https://www.haomeiwen.com/subject/fijqrktx.html