JAVA设计模式之策略模式

4.策略模式Demo
  假设现在需要根据业务的需求,对调用接口传进来的参数,选择合适的策略进行处理,这里假设有策略一和策略二。

Client:

复制代码
1 /**
2 * @author lyh
3 * @version v-1.0.0
4 * @since 2021/6/2
5 */
6 public class Client {
7 public static void main(String[] args) {
8 //根据需要客户自行选择策略
9
10 //选择策略1
11 StrategyObj strategyOne = new StrategyObj(new StrategyOne());
12 System.out.println(strategyOne.strategy(“one”));
13 //选择策略2
14 StrategyObj strategyTwo = new StrategyObj(new StrategyTwo());
15 System.out.println(strategyTwo.strategy(“two”));
16 }
17 }
18
19 输出:
20 执行策略1!
21 执行策略2!
22
23 Process finished with exit code 0
复制代码
  策略接口:

复制代码
1 /**
2 * @desc:策略接口
3 /
4 public interface Strategy {
5 String execute(String s);
6 }
7
8 /
*
9 * @desc:策略接口封装
10 */
11 public class StrategyObj {
12
13 private final Strategy strategy;
14
15 public StrategyObj(Strategy v) {
16 this.strategy = v;
17 }
18
19 public String strategy(String s) {
20 return strategy.execute(s);
21 }
22
23 }
复制代码
  策略实现:

复制代码
1 /**
2 * @desc:策略一
3 /
4 public class StrategyOne implements Strategy {
5 @Override
6 public String execute(String s) {
7 return “执行策略1!”;
8 }
9 }
10
11 /
*
12 * @desc:策略二
13 */
14 public class StrategyTwo implements Strategy {
15 @Override
16 public String execute(String s) {
17 return “执行策略2!”;
18 }
19 }
复制代码
5.使用Lambda表达式
  通过上面的demo应该可以意识到Strategy是一个函数式接口;除此之外,它还与Predicate具有同样的函数描述。这意味着我们不需要声明新的类来实现不同的策略,通过直接传递Lambda表达式就能达到同样的目的且更简洁。

复制代码
1 public class Client {
2 public static void main(String[] args) {
3 StrategyObj strategyOne = new StrategyObj((String s) -> {return “执行策略1”;});
4 System.out.println(strategyOne.strategy(“one”));
5
6 StrategyObj strategyTwo = new StrategyObj((String s) -> {return “执行策略2”;});
7 System.out.println(strategyTwo.strategy(“two”));
8 }
9 }
USB Microphone https://www.soft-voice.com/
Wooden Speakers https://www.zeshuiplatform.com/
亚马逊测评 www.yisuping.cn
深圳网站建设www.sz886.com

上一篇:C++设计模式——策略者模式(Strategy)


下一篇:mybatis-plus自动生成代码以及page的使用