文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java设计模式之策略模式怎么实现

2023-05-31 00:48

关注

这篇文章主要介绍了java设计模式之策略模式怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

策略模式:策略模式是一种定义一系列算法的方法,算法完成的工作都是相同的工作,但是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。

Java实现一个策略模式:

需求:商场收银系统,收银方式为正常收费,打八折,满300返100,这三种收费方式。

创建一个超类。即收费的抽象方法。

public abstract class CashSuper {  public abstract double acceptCash(double money);}

创建实现此超类的类。

public class CashNormal extends CashSuper {   @Override  public double acceptCash(double money) {    return money;  } }

根据商场收费方式的不同,创建三种收费方式的具体实现算法类

public class CashRebate extends CashSuper {  private double moneyRebate=1;    public CashRebate(String moneyRebate){    this.moneyRebate=Double.parseDouble(moneyRebate);  }  @Override  public double acceptCash(double money) {            return money*moneyRebate;  }}
public class CashReturn extends CashSuper {    private double moneyCondition=0;  private double moneyReturn=0;    public CashReturn(String moneyCondition,String moneyReturn){    this.moneyCondition=Double.parseDouble(moneyCondition);    this.moneyReturn=Double.parseDouble(moneyReturn);  }      @Override  public double acceptCash(double money) {        double result=money;    if(money>=moneyCondition){      result=money-Math.floor(money/moneyCondition)*moneyReturn;    }        return result;  }}
public class CashNormal extends CashSuper {  @Override  public double acceptCash(double money) {    return money;  }}

写一个Context来通过同一个方法进行 不同付费方式的实现。因为需要创建不同的对象,所以需要结合简单工厂模式来实现。

public class CashContext {  private CashSuper cs=null;    public CashContext(String type){    switch (type) {    case "正常收费":      CashNormal cs0=new CashNormal();      cs=cs0;      break;    case "满300返100":      CashReturn cr1=new CashReturn("300", "100");      cs=cr1;      break;    case "打八折":      CashRebate cr2=new CashRebate("0.8");      cs=cr2;      break;          }  }    public double GetResult(double money){    return cs.acceptCash(money);  }  }

测试类

public class Test {  public static void main(String[] args) {        double a=new CashContext("打八折").GetResult(300);    System.out.println(a);    double b=new CashContext("正常收费").GetResult(300);    System.out.println(b);    double c=new CashContext("满300返100").GetResult(300);    System.out.println(c);  }}

控制台。

240.0
300.0
200.0

总结:策略模式简化了单元测试,因为每个算法都是自己的类,可以通过自己的接口单独测试。

策略模式是用来封装算法的,但是在实际使用过程中,可以用他来封装几所任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。

自己感悟:总的来说,策略模式对算法进行了封装,例如功夫熊猫,继承动物的超类之后,既需要有实现语言的功能,又需要实现功夫的功能,使用策略模式,将各个算法分开,在使用的时候可以很好的组合在一起。

感谢你能够认真阅读完这篇文章,希望小编分享的“java设计模式之策略模式怎么实现”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯