策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
策略模式式对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象管理。
”准备一组算法,并将每一个算法封装起来,使得它们可以互换。“
这个模式涉及到三个角色:
环境(Context)角色:持有一个Strategy类的引用(上下文对象),负责和具体的策略类交互。
抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
应用场景:
优点:
缺点:
有些时候要改变需求算法还是需要更改客户端的程序。
客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类i。
增加了对象的数目。
只适合扁平的算法结构
本质:分离算法,选择实现。