开发过程中,有时实现的某一个功能在不同条件下有不同的处理逻辑,需要运用不同的算法,此时可以使用策略模式。
在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,称之为一种策略,为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做规则的定义,而每种算法则对应于一个具体策略类。
策略模式的主要目的是将算法的定义与使用分开,将算法的定义放在专门的策略类中,每一个策略类封装了一种实现算法,使用算法的环境类针对抽象策略类进行编程。
策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化。
context为环境类,即使用策略算法的客户端类,它与抽象策略类之间建立一个关联关系。
总结
策略模式用于算法的自由切换和扩展,对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法来解决某一问题,同时可以方便地更换算法或者增加新的算法。只要涉及到算法的封装、复用和切换都可以考虑使用策略模式。
个人觉得策略模式是一种简化版的状态模式,环境类运用不同的策略子类产生不同的算法,与环境类在不同状态子类下算法不同是一样的,只是策略模式中环境类没有状态转换逻辑。