【设计模式】——策略模式之赌球风波

2024-05-25 17:18

本文主要是介绍【设计模式】——策略模式之赌球风波,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前提摘要:

今天晚上世界杯进行淘汰赛,一场重头戏是巴西队和智利队。小华是内马尔的粉丝,他希望巴西队能赢,小玉认为智利队是黑马,能赢巴西队。于是二人打赌,赌资为每个球10元,比如两队进5球,则输的一方需出50元;小华又加了一条,如果内马尔进球则赌资加10元;小玉又加了一条,如果两队90分钟之内打平,需点球决胜负,则说明两队实力相近,赌资减少20%


策略模式:

围绕赌资的多少,抽象出一个父类,然后三个具体算法类继承父类,再用一个策略选择类为算法类和界面类承上启下,界面部分根据相应要求给出代码!结构图为:



编写代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 策略模式
{public partial class 赌球那点事 : Form{public 赌球那点事(){InitializeComponent();}//赌资抽象类abstract class CashSuper{public abstract double acceptCash(double money);}//正常情况下赌资子类class CashNormal : CashSuper{public override double acceptCash(double money){double result = money;return money;}}//内马尔进球后的赌资class CashAdd : CashSuper{private double goalsNeymar = 0.0d;private double moneyAdd = 0.0d;public CashAdd(string goalsNeymar, string moneyAdd){this.goalsNeymar = double.Parse(goalsNeymar);this.moneyAdd = double.Parse(moneyAdd);}public override double acceptCash(double money){double result = money;if (goalsNeymar > 0)result = money + goalsNeymar * moneyAdd;return result;}}//90分钟未分胜负,需点球时赌资class CashRebate : CashSuper{private double moneyRebate = 1d;public CashRebate(string moneyRebate){this.moneyRebate = double.Parse(moneyRebate);}public override double acceptCash(double money){return money * moneyRebate;}}//CashContext类class CashContext{private CashSuper cs;public CashContext(CashSuper csuper){this.cs = csuper;}public double GetResult(double money){return cs.acceptCash(money);}}
private void button3_Click(object sender, EventArgs e){double total = 0.0d;CashContext cc = null;switch (cmbType.SelectedItem .ToString()){case "正常计算":cc = new CashContext(new CashNormal());break;case "内马尔进球":cc = new CashContext(new CashAdd("1", "10"));break;case "点球大战":cc = new CashContext(new CashRebate("0.8"));break;}double totalPrices = 0d;totalPrices = cc.GetResult (Convert.ToDouble(txtPrice.Text) * Convert.ToDouble(txtNum.Text));total = total + totalPrices;txtShow.Text = "单价:" + txtPrice.Text + "进球数:" + txtNum.Text+ " " + cmbType.SelectedItem + " 合计:" + totalPrices.ToString();label10.Text = total.ToString();}private void 赌球那点事_Load(object sender, EventArgs e){cmbType.Items.AddRange(new object[] { "正常计算", "内马尔进球", "点球大战" });cmbType.SelectedIndex = 0;}}
}



运行:

假如巴西3:2智利,内马尔有进球,则:


这场赌球风波到底结局如何,再过几个小时就知道了!



这篇关于【设计模式】——策略模式之赌球风波的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002133

相关文章

如何开启和关闭3GB模式

https://jingyan.baidu.com/article/4d58d5414dfc2f9dd4e9c082.html

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

服务器雪崩的应对策略之----SQL优化

SQL语句的优化是数据库性能优化的重要方面,特别是在处理大规模数据或高频访问时。作为一个C++程序员,理解SQL优化不仅有助于编写高效的数据库操作代码,还能增强对系统性能瓶颈的整体把握。以下是详细的SQL语句优化技巧和策略: SQL优化 1. 选择合适的数据类型2. 使用索引3. 优化查询4. 范式化和反范式化5. 查询重写6. 使用缓存7. 优化数据库设计8. 分析和监控9. 调整配置1、

设置Nginx缓存策略

详细信息 Nginx服务器的缓存策略设置方法有两种:add_header或者expires。 1. add_header 1)语法:add_header name value。 2)默认值:none。 3)使用范围:http、server、location。 配置示例如下: add_header cache-control "max-age=86400";#设置缓存时间为1天。add

从《深入设计模式》一书中学到的编程智慧

软件设计原则   优秀设计的特征   在开始学习实际的模式前,让我们来看看软件架构的设计过程,了解一下需要达成目标与需要尽量避免的陷阱。 代码复用 无论是开发何种软件产品,成本和时间都最重要的两个维度。较短的开发时间意味着可比竞争对手更早进入市场; 较低的开发成本意味着能够留出更多营销资金,因此能更广泛地覆盖潜在客户。 代码复用是减少开发成本时最常用的方式之一。其意图

Builder模式的实现

概念 在创建复杂对象时,将创建该对象的工作交给一个建造者,这个建造者就是一个Builder。在日常的开发中,常常看到,如下这些代码: AlertDialog的实现 AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setMessage("你好建造者");builder.setTitle

[分布式网络通讯框架]----ZooKeeper下载以及Linux环境下安装与单机模式部署(附带每一步截图)

首先进入apache官网 点击中间的see all Projects->Project List菜单项进入页面 找到zookeeper,进入 在Zookeeper主页的顶部点击菜单Project->Releases,进入Zookeeper发布版本信息页面,如下图: 找到需要下载的版本 进行下载既可,这里我已经下载过3.4.10,所以以下使用3.4.10进行演示其他的步骤。

《分析模式》“鸦脚”表示法起源,Everest、Barker和Hay

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》这本书里面用的并不是UML表示法。作者Martin Fowler在书中也说了,该书写于1994-1995年,当时还没有UML。作者在书中用的是一种常被人称为“鸦脚”的表示法。  有的同学会有误解,例如有同学发表以下感想: “鸦脚”表示法当然不是Fowler先使用的。F