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,一经查实,立即删除!

相关文章

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

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

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

极性定义了流动的方向,例如磁场或电流的方向。在光纤中,极性是定向的;光信号通过光缆从一端传输到另一端。光缆一端的光纤链路传输信号(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…

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

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

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

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

vm+ubuntu联网

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

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

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

一个本地分支能关联两个远程仓库吗_使用git分支保存hexo博客源码到github

hexo是当前最火的静态博客框架,支持Markdown格式文章编辑并自动生成对应的静态网页,简单高效令人爱不释手。使用hexo写博客的流程通常是,通过hexo new post_name命令,会自动在source/_post目录下生成一个待写的post_name.md文件编…

git的入门摸索和入门研究

git官网:https://git-scm.com/ git教程---菜鸟教程:http://www.runoob.com/git/git-tutorial.html git教程---廖雪峰:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ git视频教程---极客学院&#xf…

您的光纤电缆和测试仪是否准备好用于400G以太网?

在大型超规模和云数据中心提供商的推动下,信令和收发器技术的进步推动了下一代传输速度的发展。现在,通过多模和单模光纤的400G以太网应用有多种选择,更多选项即将推出。国外的谷歌、Facebook和微软等大公司正在推动创新,以支持80…

网络游戏测试过程

游戏测试起因近几年来,网络游戏成了网络最新的弄潮儿,从盛大之传奇般的掘起,吸引了无数公司的眼球。但由于随着玩家的品位的升高,代理费用的上升,单一的代理国外游戏的模式已经很难在国内立足,而有中国传统…

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException:

解决: 1 在SQL语句中使用#{name,jdbcTypeVARCHAR} ​指定JDBC类型 错误的: 修改后的:

uni中动态加载class_Java基础·类加载、反射

原文:Java基础类加载、反射 - 掘金 作者:宸道移动安全团队15.1 类的加载概述当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三步来实现对这个类进行初始化。1.加载:是将class文件读…

mysql 安装目录说明

转载于:https://www.cnblogs.com/xiluhua/p/7137663.html