定   义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,

不会影响到使用算法的客户。

示例:商场收银系统,实现正常收费、满300返100、打8折.......等不同收费方式

效果图:

结构图

HTML代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>设计模式:策略模式</title><style type="text/css">table{width: 300px;height: 250px;border-collapse: collapse;}table, tr, td{border: 1px solid gray;}</style>
</head>
<body><form id="form1" runat="server"><table><thead><tr><td colspan="3">商场收银软件</td></tr></thead><tr><td>单价:</td><td><asp:TextBox runat="server" ID="txtPrice"></asp:TextBox></td><td><asp:Button runat="server" ID="btnOK" Text="确定" onclick="btnOK_Click" /></td></tr><tr><td>数量:</td><td><asp:TextBox runat="server" ID="txtNumber"></asp:TextBox></td><td><asp:Button runat="server" ID="Button1" Text="重置" onclick="Button1_Click" /></td></tr><tr><td>计算方式:</td><td><asp:DropDownList runat="server" ID="ddlCashType"><asp:ListItem Selected="True">正常收费</asp:ListItem><asp:ListItem>打8折</asp:ListItem><asp:ListItem>满300返100</asp:ListItem></asp:DropDownList></td><td></td></tr><tr><td colspan="3"><asp:TextBox runat="server" ID=txtMsg TextMode="MultiLine" Rows="8" Columns="30"></asp:TextBox></td></tr><tr><td>总计:</td><td><asp:Label runat="server" ID="lblTotal"></asp:Label></td><td></td></tr></table></form>
</body>
</html>

View Code

CashContext类

  public class CashContext{CashSuper cs = null;public CashContext(string type){switch (type){case "正常收费":cs = new CashNormal();break;case "满300返100":cs = new CashReturn("300", "100");break;case "打8折":cs = new CashRebate("0.8");break;}}public double GetResult(double money){return cs.AcceptCash(money);}}

View Code

CashSuper类

/// <summary>/// 现金收费抽象类/// </summary>public abstract class CashSuper{public abstract double AcceptCash(double money);}

View Code

CashNormal类

/// <summary>/// 正常收费子类/// </summary>public class CashNormal : CashSuper{public override double AcceptCash(double money){return money;}}

View Code

CashRebate类

 /// <summary>/// 打折收费子类/// </summary>public 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;}}

View Code

CashReturn类

 /// <summary>/// 返利收费子类/// </summary>public class CashReturn : CashSuper{private double moneyCondition = 0.0d;private double moneyReturn = 0.0d;public CashReturn(string moneyCondition, string moneyReturn){this.moneyCondition = double.Parse(moneyCondition);this.moneyReturn = double.Parse(moneyReturn);}public override double AcceptCash(double money){double result = money;if (money >= moneyCondition){result = money -Math.Floor(money / moneyCondition) * moneyReturn;}return result;}}

View Code

客户端实现

        protected void btnOK_Click(object sender, EventArgs e){CashContext csuper = new CashContext(ddlCashType.SelectedValue);string totalPrice = csuper.GetResult(Convert.ToDouble(txtNumber.Text)*Convert.ToDouble(txtPrice.Text)).ToString();lblTotal.Text = totalPrice;}

View Code

策略模式和简单工厂模式区别:

用途不一样,名字就有区别,一把斧头用来砍人就叫凶器,用来砍材就叫伐木斧,用来劈门就叫消防斧,这些模式的名字都是根据具体使用时的场景,联系了现实里某样东西或某种习惯而取得,所以很相似的模式行为有不同叫法很正常。

工厂模式:根据你给出的目的来生产不同用途的斧子,例如要砍人,那么工厂生产砍人斧子,要伐木就生产伐木斧子。
               即根据你给出一些属性来生产不同行为的一类对象返回给你。
关注对象创建

策略模式:用工厂生产的斧子来做对应的事情,例如用砍人的斧子来砍人,用伐木的斧子来伐木。
               即根据你给出对应的对象来执行对应的方法。
关注行为的选择

转载于:https://www.cnblogs.com/qianxingdewoniu/p/3540781.html

设计模式:策略模式(Strategy)相关推荐

  1. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

  2. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  3. 设计模式--策略模式(strategy)

    1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...

  4. 李建忠设计模式——策略模式Strategy

    目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...

  5. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  6. 趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?

    文章目录 案例:指挥官AI 策略模式 配合工厂模式 总结 完整代码与文档 案例:指挥官AI 案例可能不符合实际逻辑,仅用于表述设计模式的思想,勿介意 假设我们开发了一款类似全面战争的即时战略游戏,为了 ...

  7. 设计模式 – 策略模式(Strategy)

    2019独角兽企业重金招聘Python工程师标准>>> 实例:商店促销 (1)首先考虑用简单工厂模式进行设计 Ø  客户端代码Main.java package com.yilong ...

  8. 设计模式 - 策略模式Strategy

    策略模式(Strategy): 定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 1 using System; 2 using System.Co ...

  9. 设计模式——策略模式( Strategy Pattern )

    写代码超过千行,自定义类10个以上,往往写着写着就觉的乱,最终决定抽空补习下设计模式方面的知识.本来AS3出了本关于设计模式的书的,国人也翻译了.我同事也早早买了一本,但前些天我借来看了几页,翻译的太 ...

  10. Java设计模式-策略模式(Strategy)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.策略模式 二.策略模式示例代码 1.支付策略 2.具体支付策略实现 3.策略执行对象 4.测试 总结 前言 本篇介 ...

最新文章

  1. SqlParameter的用法
  2. 盘点那些跨界玩到飞起的程序员们!
  3. 计算机编程关键字一,和计算机编程有关的101条伟大的名言
  4. access数据库密码破解
  5. 大厂首发:springcloud菜鸟教程
  6. ECSHOP 大商创 对接易支付接口
  7. 小米手机MIUI安装Google服务框架和Google Play的教程
  8. python利用matplotlib库绘制三维图学习
  9. SNF快速开发平台MVC-名片管理(实际名片样式)
  10. 20165219王彦博第一周学习总结
  11. xcode 真机调试无法选择对应设备 “ineligible devices“
  12. c语言逗女生小程序代码,求一个示爱的小程序 C语言
  13. with dlz mysql 条件_BIND+DLZ+MYSQL实现区域记录动态更新
  14. Opencv中 Mat矩阵中属性【随笔记】
  15. 《解剖PetShop》系列之五
  16. 【GStreamer 】1-扫盲介绍
  17. Redis 从入门到弃坑
  18. 设置网络适配器IP优先级
  19. 2023五一加班工资三倍怎么算(附详细计算公式)
  20. 使用scrapy爬取前程无忧所有大数据岗位并做出数据可视化

热门文章

  1. sigmoid function vs softmax function
  2. HDU5670Machine(抽象进制)
  3. 经struts2中的action后,jsp中css失效的问题
  4. 总结:Oracle快速入门
  5. 读书笔记2014年第1本:《赤裸裸的统计学》
  6. 【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】
  7. JAVA--虚函数,抽象函数,抽象类,接口
  8. 【转载】让页面不缓存js
  9. Failed to install .apk on device 'emulator-5554': timeout解决方法
  10. android 整数与ip地址的转换