策略模式是一种设计模式,用于解决复杂的问题。它通过将一系列算法封装成独立的类,并使它们可以相互替换,从而使策略的变化独立于使用它的客户端。策略模式和工厂模式的区别在于,策略模式侧重于定义一系列的算法,并将每一个算法封装起来,使他们可以互相替换,而工厂模式则侧重于根据不同的条件创建不同的对象。
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为,这种类型的设计模式属于对象的行为模式,在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变的上下文对象。
策略模式的核心在于定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,本模式使得算法可独立于使用它的客户而变化,策略模式的主要目的是将一组复杂的、容易相互影响的逻辑拆分成更小、更容易管理的部分。
在策略模式中,我们有两种角色:策略和环境,策略是一个独立的类,它包含一个特定的算法,这个算法可以有不同的实现,但它必须有一个接口,以便环境可以调用它,环境则是一个包含一组策略的类,它可以在运行时更改策略。
策略模式的优点包括:
1、提供了管理相关的算法族的办法,策略类的等级结构定义了一个算法或行为族,恰当使用继承可以把公共的代码移到父类里面,从而避免代码重复。
2、提供了可以互换算法族的办法,这些策略有共同的接口,相同的方法,所以你的对象可以根据需要使用不同的算法。
3、提供了支持开闭原则的方法,你可以添加新的算法,只要实现它们的接口即可,使你的算法可以独立于使用它的客户而变化。
策略模式也有一些缺点,
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类,这就意味着客户端必须理解每一个策略是如何工作的。
2、由于每个具体策略都是类,会产生很多的策略类,增加系统的复杂度。
策略模式是一种强大的设计模式,它可以帮助解决复杂的问题,它也有一定的局限性,需要根据具体的应用场景来选择是否使用。