Java策略模式demo(打折策略例子)

策略模式:它定义了算法家族,分别封装起来,让它们之间可以相互替换。此模式让算法的改变,不会影响到使用算法的客户端。

它对一系列的算法进行封装,为所有的算法定义一个抽象的接口,并通过继承该抽象算法接口对所有的算法加以封装和实现。具体的算法的选择交由客户端来决定(策略),策略模式主要用来平滑地处理算法的切换。

下面是形象的策略模式的结构图:

下面看demo

Strategy接口

StrategyA实现类

StrategyB实现类

Context类

测试类

这是一个打折策略的demo。策略一:直接打8折。策略二:低于100打9折,高于100的话,高出100的那部分打6折。

然后我们来看结构:一个策略接口抽象打折策略。两个具体的策略类实现接口。一个维护了具体策略对象的类context。可参考下图进行形象理解。

 

 当商家需要改变策略时就直接改变生成的策略算法就ok了。也就是说,它把策略和业务分割开了。你需要什么策略就生成什么策略就行了。然后把策略当作参数传进去就ok。 

如果不使用策略模式,那么test函数就是这样写:

        int num = 200;Strategy strategy = new StrategyA();double cost = strategy.cost(num);

这样的话策略和业务逻辑就混在一起了,就显得结构不清晰。

 

 

 

 

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

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

相关文章

允許Linux的snmp服務被查詢

一、Linux(RedHat)的配置打开默认的/etc/snmp/snmpd.conf文件,更改如下配置:1、查找以下字段:[Copy to clipboard] [ - ]CODE:# sec.name source communitycom2sec notConfigUser default public将"comunity&quo…

综合布线中所需要的的带宽和数据速率

术语带宽和数据速率通常可以互换使用,但如果您在布线领域工作,它们实际上是非常不同的。 您的internet提供商可能会公布每秒500兆比特(Mbps)的带宽。在这种情况下,它们实际上是指数据速率。在布线领域,带宽…

02数据结构与算法分析之---数据的两种结构

本系列是阅读《数据结构与算法应用实践教程》第2版 主编 李文书 北京大学出版社 的读书笔记,加上自己的理解,更多的是学习的记录与反思,如有不妥,欢迎指正,非常感谢。转载于:https://www.cnblogs.com/guochaoxxl/p/712…

java 多态判断非空_收藏Java 面试题全梳理

脚本之家你与百万开发者在一起来源 | Java建设者(ID:javajianshe)作者 |cxuan如若转载请联系原公众号Java 基础篇Java 有哪些特点并发性的:你可以在其中执行许多语句,而不必一次执行它面向对象的:基于类和面向对象的编程语言。独立…

4. 用MVC实现URL路由

用MVC实现URL路由原文:http://quickstarts.asp.net/3-5-extensions/mvc/MvcUrlRouting.aspx1. 介绍MVC框架使用URL路由将URL映射到控制器类及Action方法。URL路由自动解析URL中的变量,并将他们作为参数传递给Action方法。2. 默认路由MVC提供了一些默认UR…

福禄克官方经销商给您科普光纤极性基础

极性定义了流动的方向,例如磁场或电流的方向。在光纤中,极性是定向的;光信号通过光缆从一端传输到另一端。光缆一端的光纤链路传输信号(Tx)必须与另一端的相应接收器(Rx)匹配。那么,…

django Form组件

django Form组件 Django的Form主要具有一下几大功能: 生成HTML标签验证用户数据(显示错误信息)HTML Form提交保留上次提交数据初始化页面显示内容小试牛刀 1、创建Form类 from django.forms import Form from django.forms import widgets #…

RUP大讲堂(第三讲):如何建立软件产品的愿景

我撰写的一些关于RUP的讲义,PDF格式,可在文后点击“附件下载”阅读全文。本篇内容简介及部分截图:◇ 为什么需要愿景◇ 业务愿景◇ 系统愿景◇ 导出愿景的技巧◇ 小结

光纤测试时不得不用的福禄克CFP光纤测试仪

不同的光纤应用具有不同的最大插入损耗要求,以确保损耗不会过高,从而防止信号正确到达远端。因此,第一项任务涉及确定系统上线时客户计划运行的光纤应用程序,以及他们将来计划运行的光纤应用程序。 假设您的客户正在设计一个数据…

java怎么表示正无穷大_有什么比无穷大更大,比无穷小更小?

你好,欢迎来到我的《数学通识50讲》。我们讲无穷大是比任何数都大,那么世界上只有一个无穷大吗?如果有多个,能比较大小吗?类似的,无穷小就是无限接近于零,那么世界上会有不同的无穷小么&#xf…

【Linux】crontab 定时启动sh

crontab -e 20点59分启动脚本 59 20 * * * sh /home/fzuir/xingye4crawl/endXingYe4Crawl.sh >/home/fzuir/xingye4crawl/xingye4_pro_kill.log 2>&1 启动: #!/bin/bash . /home/fzuir/.profile# JAVA export JAVA_HOME/usr/local/jdk1.7.0_75 export JRE…

越用越快的福禄克布线认证测试仪

对一些人来说,福禄克网络推出的布线认证测试仪系列仿佛就在昨天,特别是那些仍然坚持使用已经停产的福禄克DTX系列测试仪的用户。 但信不信由你,现在是包括DSX系列的测试仪在内的VersionV测试仪和光纤测试仪Pro和CFP光纤测试仪专业认证测试人员…

ADSL掉线解决方法全略

1.接地线质量有问题。PC掉地性能一定要好,否则静电会影响ADSL的传输速率,甚至会引起掉线。另外,由于施工时电源布放不规范,有的用户没有接地线,或地线质量不合格,也会影响网络设备的正常使用&am…

日照油库系统推荐_战“疫”快报(3.21)| 油库三期工程罐基础混凝土浇筑全部完成...

“3月20日,油库三期工程罐基础混凝土浇筑施工全部完成,为确保油库三期工程整体工期奠定了坚实基础。”“海通公司“日照—韩国平泽”航线恢复每周三班运营。海通公司在持续抓好疫情防控同时,保障腹地企业复工复产,精心组织航线运行…

vm+ubuntu联网

在vm下刚装了ubuntu,就是上不了网,确认以下配置后方可以 1、我的电脑开机自动把VM的相关服务都关闭了,需要手动打开 在控制面板中搜索服务,手动启动vm服务 2、在适配器里启用vm网卡 3、使用桥接模式 转载于:https://www.cnblogs.c…

网络布线工程师科普铜缆光纤损耗那点事!

(1)插入损耗 什么是插入损耗? 插入损耗是信号沿电缆链路传输时损失的能量量。对于任何类型的传输,无论是电力传输还是数据传输,这都是一种自然现象。这种信号的减少,也称为衰减,与电缆长度直接…

Delphi - 被廉价甩卖的传奇

2008年5月,全球的目光似乎都在关注微软与雅虎百亿收购的暗战,当雅虎在为500亿还是400亿的价钱出卖自己这个问题所困扰时,昔日微软王朝的挑战者——Borland公司却以2300万美元的价格将曾经为自己奠定传奇的IDE(Integrated Develop …