时光荏苒,岁月如梭,不知不觉2020就这么过去了 。新的一年,预祝大家心想事成、身体健康 。
基本介绍策略模式是行为型设计模式的一种 。
策略模式的核心思想是:定义算法族(可以理解为多组算法、行为),将其分别封装起来,并且确保他们之间可以相互替换 。这样做可以将算法的变化独立于使用算法的用户 。
可能通过这些专业的术语还是不太好理解什么是策略模式 。那么我打个比方:中午了要去吃饭了,我们可以选择米饭、面条、水饺、炒饼等等……这其中的每一个食物我们都可以将其看作是一个策略 。
策略模式中体现出了三个设计原则:
1、将变化的代码从不变的代码中分离出来 。策略模式UML类图
2、面向接口编程 。
3、尽可能地少使用继承,可以使用组合和聚合替代 。
文章插图
类图讲解
【什么?都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();}}
执行结果文章插图
总结1、使用策略模式的关键在于学会分析项目中变化和不变的部分 。
2、使用策略模式可以促使代码变得更加有弹性、易于扩展、易于维护 。
3、策略模式符合开闭原则,当需要新增行为时只需添加一种策略即可 。
4、策略模式的缺点是当策略过多时会导致类的数量庞大 。
今天的分享就到这里了,如果感觉“菜鸟”写的文章还不错,记得点赞、转发加关注呦!你们的支持就是我坚持下去的动力 。文章哪里写的有问题的也希望大家可以指出,我会虚心受教 。
推荐阅读
- 普洱属于什么茶,水仙茶属于什么茶
- 中上等婚姻指的是什么?上等女人是什么意思
- 书中自有黄金屋完整诗句?书中自有黄金屋的下一句是什么_1
- 山是如何形成的? 地球上的高山是怎样形成的
- 秋天喝什么茶最养生,喝红茶拉肚子是咋回事喝红茶的禁忌
- 秋季养肺茶喝什么,秋季不同的人选择喝不同的茶
- 传奇世界|传奇世界:战士在成型前,都需要注意些什么?
- 万贵妃为什么没有封皇后?李渊是因为两个妃子反的吗
- 为什么加入信托行业?从整个信托行业来看,现阶段
- 3d打印机为什么不普及?3d打印机缺点