大话设计模式-策略模式与简单工厂模式

来源:http://blog.csdn.net/wulingmin21/article/details/6712684


策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

例如:

CashNormal、CashRebate、CashReturn三种算法(正常收费、打折收费、返利收费),都继承CashSuper。如果还有别的收费方式,再写一个类,继承CashSuper。通过对CashContext的GetResult方法调用,可以得到收取费用的结果。通过构造方法传入具体的收费策略。

class CashContext  
{  private CashSuper cs;  public CashContext(CashSuper csuper)  {  this.cs = csuper;  }  public double GetResult(double money)  {  return cs.acceptCash(money);  }  }  

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。也就说实例化谁。

class CashFactory  
{  public static CashSuper createCashAccept(string type)  {  CashSuper cs = null;  switch (type)  {  case "正常收费":  cs = new CashNormal();  break;  case "满X返Y":  CashReturn cr1 = new CashReturn("X", "Y");   //X、Y为具体的数值  cs = cr1;  break;  case "打Z折":  CashRebate cr2 = new CashRebate("0.Z");  //Z为具体的数值  cs = cr2;  break;  }  return cs;  }  
}  

很明显能看出策略模式和简单工厂模式不同点。

在简单工厂中,如果增加了新类,那么这个工厂也要随之更改。在策略模式中,虽然CashContext中不用更改,但它的客户端的代码就要更改了(客户端代码有条件判断语句,如果增加了其它的,就需要改动了)。最后,将策略与简单工厂结合:

class CashContext  
{  CashSuper cs = null;  public CashContext(string type)  {  switch (type)  {  case "正常收费":  CashNormal cs0 = new CashNormal();  cs = cs0;  break;  case "满X返Y":  CashReturn cr1 = new CashReturn("X", "Y");  cs = cr1;  break;  case "打Z折":  CashRebate cr2 = new CashRebate("0.Z");  cs = cr2;  break;  }  }  public double GetResult(double money)  {  return cs.acceptCash(money);  }  
} 

客户端就不用去判断了。但是如果有别的需求,还是要改动Switch中的代码。


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

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

相关文章

全球知识图谱专家分布、研究流派(附学者名单)

来源: THU数据派概要:在维基百科的官方词条中:知识图谱是Google用于增强其搜索引擎功能的知识库。什么是知识图谱?在维基百科的官方词条中:知识图谱是Google用于增强其搜索引擎功能的知识库。本质上, 知识图谱旨在描述…

软件系统架构~思维导图

#原图 System.out.println("https://www.processon.com/view/link/6194f2740e3e7409b9c2f3df")

创建型、结构型、行为型模式(1)

来源:http://blog.csdn.net/wulingmin21/article/details/6753363 目的 创建型模式 Creational Pattern 结构型模式 Structural Patterns 行为型模式 Behavioral Pattern 概念 创建型模式,就是创建对象的模式,抽象了实例化的过程。…

干货|全球人工智能专利分布战情图

来源: 点滴科技资讯作者:许倩未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测&am…

tomcat高版本之URL解析异常解决

IllegalArgumentException 一、项目场景: 例如:由于Apache的tomcat的版本升级,遵循RFC 7230 and RFC 3986规范解析请求地址。同时添加了对于http头的验证请求。 导致报文存在导致特殊字符(不在解析范围内的)tomcat7…

创建型、结构型、行为型模式(2)

来源:http://blog.csdn.net/wulingmin21/article/details/6757111 创建型模式 Singleton模式解决的是实体对象个数的问题。 除了Singleton之外,其他创建型模式解决的都是New所带来的耦合关系。 Factory Method,Abstract Factory,B…

大数据行业洞察:未来2-3年或迎数据时代的真正高潮

来源: DT数据侠 作者:中关村老李从2012年的“用户标签”到2014年的“用户画像”,从2015年的“大数据”到2017年的“人工智能”,大数据正在从神坛走向现实。“标签”到“画像”,代表着数据在数量和维度上,逐…

5G时代到来,人工智能设备如何重塑TMT行业

来源:亿欧在近期召开的2018世界移动通信大会上,5G作为热点话题被高频提及,当前,5G技术已经取得突破进展,全球范围内已有运营商宣布2018年将投入商用。在这一背景下,5G与人工智能技术的结合将重塑众多产业&a…

java调用GDAL实现栅格数据的重采样的一种方法

目录 1.关于重采样 1.1概念 1.2用途 1.3常见算法 2.关于GDAL 2.1GDAL中的重采样算法 3.实现重采样 3.1思路 3.2完整代码 3.3使用QGIS验证效果 1.关于重采样 1.1概念 重采样是以原始图像的像元值或者导出的值填充到新的图像的每个像元的的过程。 1.2用途 在地理信…

Semtech与Lacuna从太空接收信息

来源:Semtech概要:Lacuna Space使用了一组星座的极地近地轨道卫星,来接收地面传感器发出的基于LoRa的信息。加利福尼亚州,卡马里奥,2018年2月26日—高性能模拟和混合信号半导体及先进算法领先供应商Semtech Corporatio…

ABAP--使用SLIN事务码进行ABAP程序扩展语法检查,提高程序开发的质量

TCODE: SLIN 或者在SE38 界面的菜单: 程序-》语法-》扩展程序检查 就会弹出下面的界面,用户可以根据自己的需求设置检查点,并根据检查结果修改程序,使自己的代码更加可靠。另外在SE38 界面的菜单&#xff1…

谷歌大脑发布神经网络的「核磁共振」,并公开相关代码

作者:杨晓凡、camel、思颖、杨文神经网络的可解释性一直是所有研究人员心头的一团乌云。传统的尝试进行可解释性研究的方法是通过查看网络中哪个神经元被激发来来理解,但是即使我们知道「第 538 号神经元被激发了一点点」也毫无意义,并不能帮…

Java加密与解密的艺术~Provider

Provider类实现了Java安全性的一部分或全部,我们称它为提供者。 Provider类可能实现的服务包括: 算法(如DSA、RSA、MD5或SHA-1) 密钥的生成、转换和管理设施(如用于特定算法的密钥) 每个提供者…

Fiddler (一) 教程(Web调试工具)

From:http://kb.cnblogs.com/page/130367/ Fiddler的基本介绍 Fiddler 官方网站:http://www.fiddler2.com Fiddler 官方帮助:http://docs.telerik.com/fiddler/knowledgebase/quickexec Fiddler 官方网站提供了大量的帮助文档和视频教程&…

从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程

通用分页存储过程很实用,但毕竟不是全适用于一些环境,譬如我遇到过一种情况,需要先外链两个表,然后再关联几个表,总之参数传递很烦人,这里不细说了,现在只谈实现查询后,怎么分页的简单技巧1,建立用户函数CREATE function F_xxxx(ID nvarchar(36),Key nvarchar(36),......)…

量子计算机就要来了,它真的能改变世界吗?

来源:网易科技概要:量子计算机的理论运行速度远远超出任何传统的超级计算机。在位于纽约市以北约50英里处僻静乡村中的一个小型实验室内,天花板下缠绕着错综复杂的管线和电子设备。这一堆看似杂乱无章的设备是一台计算机。它与世界上的任何一…

Fiddler (二) : Script 的 用法

Fiddler (二) Script 用法(转):http://www.cnblogs.com/mrzhoushare/articles/4953592.html Fiddler 高级用法:Fiddler Script 与 HTTP 断点调试:http://www.cnblogs.com/hushaojun/p/5644645.html 通过前一篇博客 【Fiddler教程】&#xff0…

CSDN与易观联合发布《2017-2018中国人工智能产业路线图》

来源:机器人大讲堂下载链接:https://pan.baidu.com/s/1ViNbtAi-wGJbLURyYp30TA 密码:a3dz未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评…

网站时间显示

网站时间显示2<STYLE>A.menuitem {}{ COLOR: menutext; TEXT-DECORATION: none } A.menuitem:hover {}{ COLOR: highlighttext; BACKGROUND-COLOR: highlight } DIV.contextmenu {}{ BORDER-RIGHT: 2px outset; BORDER-TOP: 2px outset; Z-INDEX: 999; VISIBILITY: hidde…

直击2018AWE:智能语言交互大厮杀、老品牌争先搭建平台、第三方平台迅速崛起

来源&#xff1a;物联网智库一年一度家电盛宴&#xff0c;中国家电及消费电子博览会&#xff08;AWE&#xff09;在上海新国际博览中心拉开帷幕&#xff01;一大批智能家电产品不断发酵&#xff0c;白电、黑电、小家电等让人应接不暇。除了不断精进的颜值外&#xff0c;科技感更…