java 设计模式 示例_Java中的策略设计模式-示例教程

java 设计模式 示例

策略模式行为设计模式之一 。 当我们对一个特定的任务有多种算法并且客户决定在运行时使用的实际实现时,将使用策略模式。

策略模式也称为策略模式 。 我们定义了多种算法,并让客户端应用程序将算法用作参数。 此模式的最佳示例之一是采用Comparator参数的Collections.sort()方法。 根据Comparator接口的不同实现,将以不同的方式对对象进行排序,请查看此文章以使用Java Comparable和Comparator在Java中对对象进行排序。

对于我们的示例,我们将尝试实现一个简单的购物车,其中我们有两种付款策略-使用信用卡或使用PayPal。

首先,我们将为我们的策略创建接口,在本例中,我们将支付作为参数传递的金额。

package com.journaldev.design.strategy;public interface PaymentStrategy {public void pay(int amount);
}

现在,我们将不得不创建使用信用卡/借记卡或通过Paypal付款的算法的具体实现。

package com.journaldev.design.strategy;public class CreditCardStrategy implements PaymentStrategy {private String name;private String cardNumber;private String cvv;private String dateOfExpiry;public CreditCardStrategy(String nm, String ccNum, String cvv, String expiryDate){this.name=nm;this.cardNumber=ccNum;this.cvv=cvv;this.dateOfExpiry=expiryDate;}@Overridepublic void pay(int amount) {System.out.println(amount +" paid with credit/debit card");}}
package com.journaldev.design.strategy;public class PaypalStrategy implements PaymentStrategy {private String emailId;private String password;public PaypalStrategy(String email, String pwd){this.emailId=email;this.password=pwd;}@Overridepublic void pay(int amount) {System.out.println(amount + " paid using Paypal.");}}

现在我们的算法已经准备就绪,我们可以实现购物车,并且付款方式将需要输入作为付款策略。

package com.journaldev.design.strategy;public class Item {private String upcCode;private int price;public Item(String upc, int cost){this.upcCode=upc;this.price=cost;}public String getUpcCode() {return upcCode;}public int getPrice() {return price;}}
package com.journaldev.design.strategy;import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;public class ShoppingCart {//List of itemsList<Item> items;public ShoppingCart(){this.items=new ArrayList<Item>();}public void addItem(Item item){this.items.add(item);}public void removeItem(Item item){this.items.remove(item);}public int calculateTotal(){int sum = 0;for(Item item : items){sum += item.getPrice();}return sum;}public void pay(PaymentStrategy paymentMethod){int amount = calculateTotal();paymentMethod.pay(amount);}
}

请注意,购物车的付款方式需要付款算法作为参数,而不是将其存储为实例变量。

让我们用一个简单的程序测试我们的设置。

package com.journaldev.design.strategy;public class ShoppingCartTest {public static void main(String[] args) {ShoppingCart cart = new ShoppingCart();Item item1 = new Item("1234",10);Item item2 = new Item("5678",40);cart.addItem(item1);cart.addItem(item2);//pay by paypalcart.pay(new PaypalStrategy("myemail@example.com", "mypwd"));//pay by credit cardcart.pay(new CreditCardStrategy("Pankaj Kumar", "1234567890123456", "786", "12/15"));}}

上面程序的输出是:

50 paid using Paypal.
50 paid with credit/debit card

策略模式类图

策略模式

重要事项

  • 我们本可以使用组合来创建策略的实例变量,但应避免这种情况,因为我们希望将特定策略应用于特定任务,因此在Collections.sort()和Arrays.sort()方法中也遵循相同的方法,将比较器用作论据。
  • 策略模式与状态模式非常相似。 区别之一是Context包含状态作为实例变量,并且可以有多个任务的执行可以依赖于状态,而在策略模式中,strategy作为参数传递给方法,而上下文对象没有任何变量来存储它。
  • 当我们有多个用于特定任务的算法并且希望我们的应用程序灵活地在运行时为特定任务选择任何算法时,策略模式很有用。

这就是Java中的Strategy Pattern的全部内容,希望您喜欢它。

参考: Java中的策略设计模式- 开发人员博客上来自我们JCG合作伙伴 Pankaj Kumar的示例教程 。

翻译自: https://www.javacodegeeks.com/2013/08/strategy-design-pattern-in-java-example-tutorial.html

java 设计模式 示例

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

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

相关文章

电磁场与电磁波实验二 熟悉Matlab PDEtool在二维电磁问题的应用

微信公众号&#xff1a;创享日记 发送&#xff1a;二维电磁 获取完整报告&#xff08;含源程序代码结果分析&#xff09; 一、实验过程 1.命令行输入pdetool打开工具箱 2.使用矩形工具拖动绘制矩形。 3.点击 4.双击矩形框上边&#xff0c;设置参数如下&#xff1a; 二、实验…

Spring Boot&JPA&Hibernate&Oracle

在本教程中&#xff0c;我们将展示如何创建一个Spring Boot应用程序&#xff0c;该应用程序通过Hibernate与Oracle数据源进行通信。 先决条件&#xff1a; Eclipse IDE&#xff08;最新版本&#xff09; Maven的4 Java 1.8 1-创建Maven项目 打开eclipse&#xff0c;然后创…

电磁场与电磁波实验三 熟悉Mathematica软件在电磁场领域的应用

微信公众号&#xff1a;创享日记 发送&#xff1a;mathematica 获取完整报告 一、电磁波 该模型显示了极化正弦波的垂直电、磁分量。 在真空中&#xff0c;这种波以光速传播。 二、电磁环 假设一个铜环(或其他导电环)放在电磁铁的一极上。当电流接通时(如图中红色的电路颜色…

基于平滑、差分的矩形波零漂(基线漂移)消除算法(MATLAB实现,代码和数据见CSDN同名资源)

问题背景 矩形波数据存放在txt中,如下图所示 数据说明:1、每个文档第一列都是时间,可以去掉; 2、共10个文件,每个文件一共17列,第一列是时间,后面是数据,其中2-5列的数据是比较好。 3、10个文件按照编号是从1到10时间上是连续的。 处理前数据波形如下 目标是做零漂…

思维-网页技术设计大作业前端HTML+CSS+JS(精美完整)

微信公众号&#xff1a;创享日记 发送&#xff1a;思维网站 获取完整源码&#xff08;打开即可用&#xff09; 网页的结构与分解 主要分以下几个版块&#xff1a; 一&#xff1a;主页版块 二&#xff1a;登录版块 三&#xff1a;注册板块 四&#xff1a;个人设置板块 五&#x…

java 设计模式 示例_Java中的中介器设计模式-示例教程

java 设计模式 示例中介者模式是行为设计模式之一 &#xff0c;因此它处理对象的行为。 中介器设计模式用于在系统中不同对象之间提供集中式通信介质。 根据GoF&#xff0c;中介者模式意图是&#xff1a; 通过封装不同对象集相互交互和通信的方式&#xff0c;允许松散耦合。 允…

二级倒立摆系统的稳定控制与仿真(Matlab/Simulink)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;二级倒立摆…

伪随机交织抑制突发噪声的MATLAB仿真(采用(2,1,3)卷积码)

在上一篇文章中 BPSK调制下(2,1,3)、(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现) 伪随机交织抑制突发噪声的仿真曲线不是很明显,虽然之前的程序没问题的,只是那样不好表现出伪随机交织的性能,突发奇想,换了一种方式,一帧一帧的做,正好利用MA…

电磁场与电磁波实验四 熟悉CST Studio软件在电磁领域的应用

微信公众号&#xff1a;创享日记 发送&#xff1a;cst 免费获取完整报告 一、实验要求 要求&#xff1a;仿真H面90波导弯头的S参数 尺寸&#xff1a; 2x4x10cm 频带&#xff1a;4~5GHz 二、实验过程 1.创建第一个立方体 2.设置旋转轴 3.选取端面&#xff0c;设置旋转结构&am…

(2,1,3)卷积码与一种QC-LDPC码的译码性能对比

在上一篇文章中 BPSK调制下(2,1,3)、(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现) 重写了(2,1,3)卷积码与一种QC-LDPC码的译码性能对比代码,同样采用MATLAB中的CPU并行计算,能够提高程序运行速度。 结果如下: 代码如下: clear; close all; c…

科学计算与仿真-高斯牛顿法的非线性最小二乘问题简单介绍与应用

微信公众号&#xff1a;创享日记 发送&#xff1a;高斯牛顿 获取完整报告&#xff08;含源程序代码&#xff09; 一、问题的提出 在日常生活和科学研究中&#xff0c;人们经常会遇到这样一类问题&#xff1a;在某些条件下&#xff0c;寻求某一数量指标的最大或最小值。例如&…

一种QC-LDPC码对突发噪声抑制的MATLAB仿真

欢迎同步关注公众号【逆向通信猿】 对博客BPSK调制下(2,1,3)、(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现)中 LDPC码对突发噪声的抑制性能作一个补充仿真,结果如下 代码如下: % LDPC code clear; close all; clc Nb = 203000; % number of bit…

锅炉汽包温度控制系统设计(过程控制课程设计matlab/simulink)

微信公众号&#xff1a;创享日记 发送&#xff1a;锅炉汽包 获取完整报告matlab/simulink仿真源文件 一、组员任务分工说明 xxx同学负责绘画出带控制点的工艺流程图&#xff0c;并构建控制方案的原理方框图。xxx同学完成了在MATLAB中仿真模型的搭建&#xff0c;参数调试和仿真结…

仿王者荣耀网页-前端网页技术设计完整精美源码HTML+CSS+JS

效果预览①主页首页 效果预览②游戏介绍页 效果预览③游戏攻略页 效果预览④手办商城页 效果预览⑤问卷调查页 效果预览⑥加入我们页 微信公众号&#xff1a;创享日记 发送&#xff1a;王者荣耀 获取完整源码&#xff08;打开即可用&#xff09; 其余及源码详见下载&…

仿今日头条实时新闻微信小程序项目源码

微信公众号&#xff1a;创享日记 发送&#xff1a;今日头条 获取完整源码&#xff08;微信开发者工具导入即可用&#xff09; 以下可以忽略不看&#xff01; 今日头条是北京字节跳动科技有限公司开发的一款基于数据挖掘的推荐引擎产品&#xff0c;为用户推荐信息、提供连接人与…

perl大骆驼和小骆驼_从代码内部:骆驼路由引擎第一部分

perl大骆驼和小骆驼因此&#xff0c;最近我重新燃起了对Apache Camel的工作方式的兴趣。 Camel是一种功能强大的集成工具&#xff0c;使用非常广泛&#xff0c;但是只要我将其投入使用&#xff0c;我都会忍不住想“好吧&#xff0c;这到底是怎么做的&#xff01;” …我只是有一…

高频小信号谐振放大器设计-课程设计Multisim仿真

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;高频课设 获…

微波技术基础实验二 功分器与定向耦合器设计

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;耦合器 获取…

微波技术基础实验一 滤波器的设计

微信公众号&#xff1a;创享日记 发送&#xff1a;滤波器 获取完整报告工程源文件 一、新建滤波器工程和设计原理图 新建一个workspace&#xff0c;并创建原理图。在图中放置电容、电感并用导线连接。双击电容和电感&#xff0c;设置电容为2pF&#xff0c;电感为1.5nH&#xff…

微波技术大作业课设-分立电容电感+微带单枝短截线+微带双枝短截线

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;微带 获取完…