策略模式是平常我们应用最广泛的但是又没有总结的一个模式,spring加载类就是典型的策略模式,还有我们的代码分层,也就策略模式的实现

一、策略模式的定义:

策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

二、涉及的角色:

1.抽象策略角色:

将需要使用的算法或者业务抽象为接口

2.具体策略角色:

具体的算法与业务实现

3.策略使用者:

定义具体使用哪一种策略,策略的调用者

三、使用场景

1.有相同的逻辑,只是具体的实现和行为上有区别(同样查数据,一个查mysql,一个查oracle)

2.客户端需要动态的决定使用哪种具体算法,算法都是同一个接口的实现类(比如打折,同样打折有慢减什么的各种优惠,不同的节日使用不同的优惠)

四、策略模式的优缺点

优点:

对客户隐藏具体的策略实现细节,彼此完全独立,具体策略实现自同一个接口,他们之间可以自由切换

易于扩展,如果添加新的策略类,代码基本不用变

缺点:

策略类过多时维护不方便,客户端知道具体的策略类比较繁琐(spring优化为配置,这样就方便好多)

五、策略模式的实现

以商店销售产品打折为例,不同的节日要有不同的打折率,出售的价格也是不一样的,使用策略模式就可以很方便的添加新的打折方案,替换打折方案。

1.抽象策略角色:

java中策略模式的使用 策略模式 java_spring


2.具体策略角色

java中策略模式的使用 策略模式 java_java_02


3.调用策略

java中策略模式的使用 策略模式 java_java_03


4.扩展

新建十一国庆的打折方案

java中策略模式的使用 策略模式 java_策略模式_04

这边我们切换具体的方案是通过new来实现的,如果使用spring则可以直接通过修改配置文件,这样扩展更方便