策略模式属于23种设计模式中的行为模式,简单的说:一个类的行为或算法可以在运行时更改。
主要解决的问题
在有多种算法的情况下,使用if...else所带来的复杂和难以维护。
什么时候使用
一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决
将这些算法封装成一个一个的类,任意地替换。
优点:
1.算法可以自由切换。
2.避免使用多重条件判断。
3.扩展性良好。
缺点:
1.策略类会增多。
2.所有策略类都需要对外暴漏。
使用场景
1.如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
2.一个系统需要动态地在几种算法中选择一种。
3.如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
策略模式的三个角色
1.环境角色(Context): 持有Strategy的引用。
2.抽象策略角色(Strategy): 提供具体策略类所需的接口。
3.具体策略角色(ConcreteStrategy):实现具体算法或行为。
个人理解
策略模式的做法,创建一个抽象类,然后不同的算法实现抽象类的同一个方法,然后再到另外一个类中调用。