什么?都2021年了你还不知道“策略模式”?

时光荏苒,岁月如梭,不知不觉2020就这么过去了 。新的一年,预祝大家心想事成、身体健康 。
基本介绍策略模式是行为型设计模式的一种 。
策略模式的核心思想是:定义算法族(可以理解为多组算法、行为),将其分别封装起来,并且确保他们之间可以相互替换 。这样做可以将算法的变化独立于使用算法的用户 。
可能通过这些专业的术语还是不太好理解什么是策略模式 。那么我打个比方:中午了要去吃饭了,我们可以选择米饭、面条、水饺、炒饼等等……这其中的每一个食物我们都可以将其看作是一个策略 。
策略模式中体现出了三个设计原则:

1、将变化的代码从不变的代码中分离出来 。
2、面向接口编程 。
3、尽可能地少使用继承,可以使用组合和聚合替代 。
策略模式UML类图
什么?都2021年了你还不知道“策略模式”?

文章插图
 
类图讲解
【什么?都2021年了你还不知道“策略模式”?】Strategy:策略接口,抽象出了相关方法 。
ConcreteStrategyA/B:具体策略类,实现了策略接口 。
Context:环境对象,类中聚合了策略接口 。
Client:客户端测试类 。
案例讲解案例:通过策略模式实现运动员通过不同方式进行游泳 。
游泳行为接口 => 策略接口
public interface SwimBehavior {// 游泳void swim();}具体游泳行为
/** * 仰泳 */public class Backstroke implements SwimBehavior {@Overridepublic void swim() {System.out.println("正在进行仰泳!");}}/** * 蛙泳 */public class Breaststroke implements SwimBehavior {@Overridepublic void swim() {System.out.println("正在进行蛙泳!");}}/** * 潜泳 */public class Diving implements SwimBehavior {@Overridepublic void swim() {System.out.println("正在进行潜泳!");}}游泳运动员 => 对应Context角色
public class Swimmers {// 游泳行为接口private SwimBehavior swimBehavior;// 运动员姓名private String name;// 构造方法public Swimmers(SwimBehavior swimBehavior) {this.swimBehavior = swimBehavior;}// 游泳public void swim() {System.out.print("比赛开始,运动员:" + name);swimBehavior.swim();}public String getName() {return name;}public void setName(String name) {this.name = name;}}客户端测试类
public class Client {public static void main(String[] args) {Swimmers swimmers = new Swimmers(new Backstroke());swimmers.setName("编程小菜鸟");swimmers.swim();}}执行结果
什么?都2021年了你还不知道“策略模式”?

文章插图
 
总结1、使用策略模式的关键在于学会分析项目中变化和不变的部分 。
2、使用策略模式可以促使代码变得更加有弹性、易于扩展、易于维护 。
3、策略模式符合开闭原则,当需要新增行为时只需添加一种策略即可 。
4、策略模式的缺点是当策略过多时会导致类的数量庞大 。
今天的分享就到这里了,如果感觉“菜鸟”写的文章还不错,记得点赞、转发加关注呦!你们的支持就是我坚持下去的动力 。文章哪里写的有问题的也希望大家可以指出,我会虚心受教 。




    推荐阅读