java策略模式代替if else及怎么写应用场景(和命令模式策略模式区别)

java策略模式代替if else及怎么写应用场景(和命令模式策略模式区别)

策略模式是属于设计模式中的行为模式中的一种,策略模式主要解决选项过多的问题,避免大量的if else 和 switch下有太多的case。

策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性@mikechen

策略模式的定义

策略(Strategy)模式:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。

策略是个形象的表述,所谓策略就是方案,日常生活中,要实现目标,有很多方案,每一个方案都被称之为一个策略

打个比方说,我们出门的时候会选择不同的出行方式,比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等,这些出行方式,每一种都是一个策略。

再比如我们去逛商场,商场现在正在搞活动,有打折的、有满减的、有返利的等等,其实不管商场如何进行促销,说到底都是一些算法,这些算法本身只是一种策略,并且这些算法是随时都可能互相替换的,比如针对同一件商品,今天打八折、明天满100减30,这些策略间是可以互换的。

在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径,这就是策略模式。

策略模式的结构

java策略模式代替if else及怎么写应用场景(和命令模式策略模式区别)

这个模式涉及到三个角色:

1.环境(Context)角色

持有一个策略类的引用,提供给客户端使用。

2.抽象策略(Strategy)角色

这是一个抽象角色,通常由一个接口或抽象类实现,此角色给出所有的具体策略类所需的接口。

3.具体策略(ConcreteStrategy)角色

实现了抽象策略定义的接口,包装了具体的算法或行为。

策略模式的实现

java策略模式代替if else及怎么写应用场景(和命令模式策略模式区别)

1.创建抽象策略类

package com.mikechen.java.design.strategy;/*** 抽象策略类** @author mikechen*/public interface Strategy {    /**     * 策略方法     */    public void strategyInterface();}

2.创建具体策略

1)具体策略A

package com.mikechen.java.design.strategy;/*** 具体策略A** @author mikechen*/public class ConcreteStrategyA  implements Strategy {    @Override    public void strategyInterface() {        System.out.println("执行策略A");    }}

2)具体策略B

package com.mikechen.java.design.strategy;/*** 具体策略B** @author mikechen*/public class ConcreteStrategyB implements Strategy {    @Override    public void strategyInterface() {        System.out.println("执行策略B");    }}

3.创建环境类

package com.mikechen.java.design.strategy;/*** 环境类** @author mikechen*/public class Context {    //持有一个具体策略的对象    private Strategy strategy;    /**     * 构造函数,传入一个具体策略对象     * @param strategy    具体策略对象     */    public Context(Strategy strategy){        this.strategy = strategy;    }        /**     * 策略方法     */    public void contextInterface(){        strategy.strategyInterface();    }}

策略模式的优缺

java策略模式代替if else及怎么写应用场景(和命令模式策略模式区别)

1.优点

  • 算法可以自由切换
  • 避免使用多重条件判断(如果不用策略模式我们可能会使用多重条件语句,不利于维护)
  • 扩展性良好,增加一个策略只需实现接口即可

2.缺点

  • 策略类数量会增多,每个策略都是一个类,复用的可能性很小
  • 所有的策略类都需要对外暴露

策略模式的应用场景

java策略模式代替if else及怎么写应用场景(和命令模式策略模式区别)

  • 多个类只有算法或行为上稍有不同的场景
  • 算法需要自由切换的场景
  • 需要屏蔽算法规则的场景
  • 出行方式,自行车、汽车等,每一种出行方式都是一个策略
  • 商场促销方式,打折、满减等
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2305938578@qq.com 举报,一经查实,本站将立刻删除。
(0)
上一篇 2023年 2月 23日 下午4:30
下一篇 2023年 2月 23日 下午4:50

相关推荐

发表回复

登录后才能评论