场景1
人旅行,set不同的策略实现类,采用对应实现类里的旅行策略办法;eg:飞机策略实现类里的策略方法,乘坐飞机旅行;
场景2
策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
商场的收银系统,商场收银时如何促销,用打折还是返利,其实都是一些算法,打一折和打九折只是形式不同,抽象分析出来,所有的打折算法都是一样的,算法本身只是一种实现促销或打折的策略,重要的是这些算法是随时都可能被替换掉的,这就是变化点
优缺点------改进
优点:
1、算法可以自由切换。
2、避免使用多重条件判断。
3、扩展性良好。
4、简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
缺点:
1、策略类会增多。 2、所有策略类都需要对外暴露。
使用场景:
1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行 为中选择一种行为。
2、一个系统需要动态地在几种算法中选择一种。
3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。注意事项:
如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
策略模式时用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种可能发生的变化。
但是在策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式使用对象,这本身并没有解除客户端需要选择判断的压力,解决这一问题的方法是使用策略模式和简单工厂模式结合,选择具体实现的职责也由策略使用类Context来承担。这就最大化的减轻了客户端的职责。
与其他模式区别联系:
策略模式和状态模式的应用场景有很大的不同:一个是封装一系列平行且复杂多变的实现方式,一个是实现把对象的内在状态的变化封装起来,用外部行为来表现出来。