策略模式
定义
定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)
简单的说,就是让类根据传入的不同的具体策略(实现了策略接口,策略接口包含一个自己的算法)来调用不同的算法。同时让一个Context类来管理策略。
示例与代码
1 | java复制代码//定义策略接口,声明对应的算法 |
在Java开发中,ThreadPool用到了这个设计模式。最后一个参数RejectedExecutionHandler
是一个接口,相当于就是我们这里的抽象策略,而使用的时候则要传入一个具体的拒绝策略。
1 | java复制代码public ThreadPoolExecutor(int corePoolSize, |
策略模式vs状态模式
从代码来看,基本和状态模式一模一样,其实这两种设计模式的总体思想都是一样的,都是为了去耦合。但是这两者对应不同的使用场景。具体来说,不同的状态可能不只是导致仅仅一个调用方法的改变,还有可能会改变一系列不同的调用方法,同时Context的其他成员变量值也有可能会变化,而且状态有可能自发的改变(有限状态机);而策略模式则更具体一点,不同的策略仅仅是调用不同的算法(algorithm)
,同时策略也不能自行变化,一般必须根据不同的场景使用不同的策略。
总结
相比于状态模式,策略模式更具有一般性一些,在实践中,可以用策略模式来封装几乎任何类型的规则,只要在分析过程中听到需要在不同实践应用不同的业务规则,就可以考虑使用策略模式处理,在这点上策略模式是包含状态模式的功能的,策略模式是一个重要的设计模式。
本文转载自: 掘金