意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
优点: 1、符合“开闭原则”,算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。4、提高了算法的保密性和安全性。
缺点: 1、客户端必须知道所有策略类,所有策略类都需要对外暴露。 2、策略类会增多。可以通过享元模式减少策略类数量。
使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。4、在具体策略类中封装算法和数据结构,提高算法保密性和安全性。