Java中的策略设计模式

策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择。 各种算法选项封装在单独的类中。

在本教程中,我们将学习在Java中实现策略设计模式。

UML表示形式:

首先,我们来看一下策略设计模式的UML表示形式:

在这里,我们有:

  • 策略:定义我们打算执行的常见操作的界面
  • ConcreteStrategy:这些是使用不同算法来执行Strategy界面中定义的操作的实现类
  • 背景:任何需要改变行为并提及策略的事物

JDK中策略模式的一个流行示例是Collections.sort()方法中java.util.Comparator的用法。 我们可以将Collections.sort()方法视为上下文,并将其作为传递对象排序策略的java.util.Comparator实例。

实施策略模式:

众所周知,任何购物网站都提供多种付款方式。 因此,让我们使用此示例来实现策略模式。

我们将首先定义我们的PaymentStrategy接口:

 public interface PaymentStrategy { void pay(Shopper shopper);  } 

现在,让我们定义两种最常见的付款方式,即货到付款和卡付款,作为两种具体的策略类:

 public class CashOnDeliveryStrategy implements PaymentStrategy { @Override public void pay(Shopper shopper) { double amount = shopper.getShoppingCart().getTotal(); System.out.println(shopper.getName() + " selected Cash On Delivery for Rs." + amount ); }  }   public class CardPaymentStrategy implements PaymentStrategy { @Override public void pay(Shopper shopper) { CardDetails cardDetails = shopper.getCardDetails(); double amount = shopper.getShoppingCart().getTotal(); completePayment(cardDetails, amount); System.out.println( "Credit/Debit card Payment of Rs. " + amount + " made by " + shopper.getName()); }  private void completePayment(CardDetails cardDetails, double amount) { ... }  } 

实施上下文:

定义了策略类之后,现在让我们定义一个PaymentContext类:

 public class PaymentContext {  private PaymentStrategy strategy;  public PaymentContext(PaymentStratgey strategy) { this .strategy = strategy; }  public void makePayment(Shopper shopper) { this .strategy.pay(shopper); }  } 

同样,我们的Shopper类看起来类似于:

 public class Shopper {  private String name; private CardDetails cardDetails; private ShoppingCart shoppingCart;  //suitable constructor , getters and setters     public void addItemToCart(Item item) { this .shoppingCart.add(item); }  public void payUsingCOD() { PaymentContext pymtContext = new PaymentContext( new CashOnDeliveryStrategy()); pymtContext.makePayment( this ); }  public void payUsingCard() { PaymentContext pymtContext = new PaymentContext( new CardPaymentStrategy()); pymtContext.makePayment( this ); }  } 

我们系统中的购物者可以使用一种可用的购买策略进行付款。 在我们的示例中,我们的PaymentContext类接受所选的支付策略,然后为该策略调用pay()方法。

策略与状态设计模式:

策略和状态设计模式都是基于接口的模式,可能看起来相似,但有一些重要区别:

  • 状态设计模式定义了各种状态,其中策略模式更多地讨论了不同的算法
  • 在状态模式中,存在从一种状态到另一种状态的过渡。 另一方面,策略模式中的所有策略类都是相互独立的

请随时探索状态设计模式 。

结论:

通过此快速教程,我们现在知道如何实现策略设计模式。

它是最常用的设计模式之一,并遵循“ 打开/关闭”原则 。 因此,要添加新策略,我们可以简单地创建一个额外的策略类。 但是,请注意,我们必须在这里更新客户端代码,因为客户端选择了要调用的策略。

翻译自: https://www.javacodegeeks.com/2019/09/strategy-design-pattern-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光纤收发器怎么连?光纤收发器连接图解!

光纤收发器可以实现光信号和电信号的转换,通过光纤进行信号的转换,最后和一些设备连接,让你的传输通信畅通无阻。当我们远距离传输时,通常会使用光纤来传输。因为光纤的传输距离很远,一般来说单模光纤的传输距离在10千…

[渝粤教育] 莆田学院 电机与拖动基础(一) 参考 资料

教育 -电机与拖动基础(一)-章节资料考试资料-莆田学院【】 绪论节测试 1、【单选题】电机的基本原理就是基于( ),实现机电能量转换。 A、牛顿三大定律 B、电磁感应 C、质量守恒 D、洛伦兹力定律 参考资料【 】 2、【单…

光纤收发器的六个指示灯代表是什么意思?

对光纤收发器这块了解的朋友应该知道,光纤收发器有6个LED指示灯,它们分别显示了收发器的工作状态,根据LED所示,我们就能判断出收发器是否工作正常和可能有什么问题,从而能帮助找出故障。那么,光纤收发器的六…

[渝粤教育] 西北工业大学 模拟电子技术基础 参考 资料

教育 -模拟电子技术基础-章节资料考试资料-西北工业大学【】 常用半导体器件原理 1、【单选题】N型半导体是在纯净半导体中掺入____; A、带正电的离子 B、三价元素,如硼等 C、五价元素,如磷等 D、带负电的电子 参考资料【 】 2、【单选题】用…

[渝粤教育] 西南交通大学 大学生的智慧篮球 参考 资料

教育 -大学生的智慧篮球-章节资料考试资料-西南交通大学【】 篮球脚步移动技术章节测试 1、【单选题】移动技术的优劣在一定程度上反映了一名篮球运动员的技术水平,移动技术的核心是对( )的控制和对身体平衡的维持。 A、身体素质 B、身体重心…

光纤收发器注意事项

光纤收发器的产品种类有很多种,每一种所对应的的端口,光纤接头也是有所不同的,我们在实际实际使用中大多注意的是按光纤接头不同而区分的类别:SC接头光纤收发器和FC/ST接头光纤收发器。那么,我们平时在使用光纤收发器的…

[渝粤教育] 西南石油大学 数据库原理及应用 参考 资料

教育 -数据库原理及应用-章节资料考试资料-西南石油大学【】 SPOC—第1章 单元测验 1、【单选题】DB、DBMS和DBS三者之间的关系是( )。 A、DB包括DBMS和DBS B、DBS包括DB和DBMS C、DBMS包括DB和DBS D、不能相互包括 参考资料【 】 2、【单选题】数据库的…

activemq网络桥接_ActiveMQ –经纪人网络解释

activemq网络桥接目的 这个由7部分组成的博客系列将分享有关如何创建ActiveMQ代理网络以实现高可用性和可伸缩性的信息。 为什么要建立经纪人网络? ActiveMQ消息代理是企业中消息传递基础结构的核心组件。 它需要高度可用并且可以动态伸缩,以促进具有不…

[渝粤教育] 西安交通大学 土力学 参考 资料

教育 -土力学-章节资料考试资料-西安交通大学【】 作业题 章测题 1、【多选题】下列哪些工程问题与岩土工程密切相关() A、基坑开挖 B、公路路基 C、浇筑楼层 D、钢结构设计 参考资料【 】 2、【判断题】通常把在土木工程建设中涉及岩石、土、地下水中的…

迷你型MINI光纤收发器的优势有哪些?

现如今,在互联网盛行的今天,我们平时所使用的网络都离不开收发器的作用,收发器有很多种,随着对网络容量的需求急剧增大,收发器由POE收发器衍生出非网管型、网管型以及迷你型等光纤收发器,接下来飞畅科技的小…

[渝粤教育] 西安理工大学 人工智能导论 参考 资料

教育 -人工智能导论-章节资料考试资料-西安理工大学【】 第一讲 人工智能概述单元测试 1、【单选题】人工智能中通常把( )作为衡量机器智能的准则。 A、图灵机 B、图灵测试 C、中文屋思想实验 D、人类智能 参考资料【 】 2、【单选题】人工智能的目的是让…

JDK 14的征兆开始出现

JDK 13当前处于Rampdown第一阶段 (RDP 1),计划在一周多一点的时间(2019年7月18日)进入Rampdown第二阶段 (RDP 2),并且暂定于2019年9月17日正式上市。当然,这意味着是时候…

[渝粤教育] 郑州大学 互联网国际政治学 参考 资料

教育 -互联网国际政治学-章节资料考试资料-郑州大学【】 第一章 单元测验 1、【单选题】( )年,中国接入国际互联网,这是中国互联网发展史上具有里程碑意义的一天,标志着中国正式成为国际互联网的一员。 A、1994 B、198…

千兆光纤收发器测试标准及参数

现如今,千兆网技术已成为新建网络和改造的首选技术,虽然对综合布线系统的性能要求也提高,但是却给用户的使用和以后的升级提供便利。但是,在千兆网综合布线系统施工过程中我们必须对光纤收发器进行测试,以保证整个布线…

[渝粤教育] 郑州财税金融职业学院 大学生创新创业教育 参考 资料

教育 -大学生创新创业教育-章节资料考试资料-郑州财税金融职业学院【】 第一章 单元测验 1、【单选题】__________对于__________就像导线对于电流一样。 A、光纤、光 B、电话、线路 C、闸门、水 D、草原、马 参考资料【 】 2、【单选题】以下5个能源有1种与其他4种差别最大&am…

[渝粤教育] 重庆工业职业技术学院 微观经济学 参考 资料

教育 -微观经济学-章节资料考试资料-重庆工业职业技术学院【】 第一章作业 第一章单元测试 1、【单选题】现有资源不能充分满足人的欲望被称为( )。 A、稀缺性 B、机会成本 C、生产什么 D、生产成本 参考资料【 】 2、【单选题】经济学研究的是 A、生产什…

jdk8 接口默认方法_JDK 8中方便的新地图默认方法

jdk8 接口默认方法Map接口在JDK 8中提供了一些方便的新方法 。 因为我在本文中介绍的Map方法是作为默认方法实现的,所以Map接口的所有现有实现都享有在默认方法中定义的默认行为,而无需任何新代码。 本文中介绍的JDK 8引入的Map方法是getOrDefault&#…

什么是千兆光纤收发器?其产品标准具体有哪些?

现如今,千兆网技术已成为新建网络和改造的首选技术,虽然对综合布线系统的性能要求也提高,但是却给用户的使用和以后的升级提供便利。千兆光纤收发器又名光电转换器,是一种快速以太网,其数据传输速率达1Gbps,仍采用CSMA…

[渝粤教育] 南方医科大学 医学统计学 参考 资料

教育 -单元机组集控运行A-汪淑奇-热动3-4班-章节资料考试资料-长沙理工大学【】 随堂测验 教育 -医学统计学-章节资料考试资料-南方医科大学【】 第一章单元测试 1、【单选题】 调查某地1000人发汞水平,以发汞含量小于2.6 μg/kg 为正常,大于等于这个值…

微信公众号如何增加查题功能(无广告查题)

这几天很多小伙伴都不知道怎么将查题的功能绑定到自己机构的微信公众号上,林林总总收到了很多小伙伴的反馈,现在直接给各位发送操作流程,希望大家一次性绑定上!(流程之后还有一些解答) 1:网址&a…