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、【单选题】用…

光纤收发器注意事项

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

千兆光纤收发器调整措施

千兆光纤收发器(又名光电转换器)是一种快速以太网,其数据传输速率达1Gbps,仍采用CSMA/CD的访问控制机制并与现有的以太网兼容,在布线系统的支持下,可以使原来的快速以太网平滑升级并能充分保护用户原来的投资。那么&am…

如何快速区分单模与多模光纤收发器?

现如今,光纤收发器的应用范围是越来越广泛了,但是市场上大多数品牌的光纤收发器外观都差不多,那么,我们在使用光纤收发器的过程中该如何辨别单模和多模光纤收发器呢?接下来就跟随飞畅科技的小编一起来详细了解下吧&…

Java中的模板方法模式

模板方法模式是一种行为模式,建议在超类中更一般地定义算法。 该算法是在称为模板方法的方法中定义的。 子类仅定义更具体的算法步骤的实现。 使用这种设计模式的好处是,算法后面的任何更改只会影响超类中的代码。 此外,它还可以提高代码的可…

什么是单模单纤/双纤光纤收发器?

光纤收发器,是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元,按其所需主要分为单纤光纤收发器和双纤光纤收发器,接下来我们就来详细介绍下什么是单模单纤/双纤光纤收发器?单模单纤和单模双纤光纤收…

什么是以太网光纤收发器,其产品特点和技术参数都有哪些?

以太网光纤收发器是一款提供以太网数据信号到光纤数据信号的双向透明转换器,可以将以太网信号通过光纤线路传输突破传输距离100米的限制,使得以太网网络覆盖得到极大的延伸。光纤收发器的出现,确保能够顺畅的将电信号与光纤信号相互转换&…

什么是CAN总线中继器?

CAN网桥(Bridge)是一个智能的中继器。使用CAN网桥对设备进行互连,克服了CAN总线结点个数及通信距离的物理限制,能有效扩充CAN网络的结点总数,延长通信距离。今天,飞畅科技的小编为大家详细介绍下CAN总线中继…

一文读懂工业设备的两种通讯方式:现场总线和工业以太网

随着传统制造企业正在加快智能制造转型的进程,工业互联网迅速在全世界范围内兴起。在工业互联网的技术构架中,通过各类通讯方式接入不同设备、系统和产品,来采集海量数据是其重要的一环。本文将重点介绍工业底层设备的两种通讯方式&#xff1…

Java中的中介器设计模式

在本教程中,我们将学习一种行为模式,该行为模式将促进彼此通信的多个对象之间的松散耦合。 Mediator设计模式背后的想法是拥有一个中心对象,该对象封装了一组对象之间的交互方式。 在调解器模式中,我们在称为调解器的单独类中提取…