1、定义:把不同的算法封装到不同类里(这些类实现同一个接口),让它们之间可以相互替换,这样算法的变化不会影响到使用算法的用户。

2、实际应用:大范围处理if…else,如果一个方法里有大量的if…else这类语句,可以通过它消除

3、类型:行为型

4、适用场景:

  • 系统中有很多类,而它们的区别仅仅是行为上的不同,适用策略模式,可以动态得在许多行为中选择一个行为。(不同的行为放到不同的类里边,有很多行为类,每种行为对应一种策略)

  • 一个系统需要动态得在几种算法中选择一种(算法即策略,封装了一系列的业务逻辑,比如拿到两个数字,有加法策略,有乘法策略)

5、优点:

  • 符合开闭原则,能够在不修改原有系统的基础上,选择行为,并且使得行为可以扩展

  • 避免使用多重条件转移语句(大量if else,switch),而是换成一个个类,替换原来if-else中的逻辑

  • 提高了算法的保密性和安全性(使用的时候,知道策略是干什么的就可以了,客户端不需要了解策略里头的内部实现 ,比如一个促销活动,里面封装各种各样的策略)

6、缺点

  • 客户端必须知道所有的策略类,并且自行决定使用哪个策略类

  • 策略类过多的问题,一个类一个行为,一个类一个策略,太多

7、相关设计模式比较

  • 策略和工厂模式(工厂方法、抽象工厂)

    工厂模式是创建型的,策略模式是行为型的,就是说,工厂模式接收指令,创建出符合要求的具体实现对象,让对象进一步去生产产品,而策略模式接收的是已经创建好的对象,从而实现不同的行为

8、UML
设计模式(2):策略模式

相关文章: