在生活当中,有一些情况是只能在多种可能选择下只能有一中情况发生。比如说是在某一个商城的打折,在做种打折策略情况下,商城只允许只用其中一种打折策略,这时候尅考虑使用策略者模式。这跟装饰这模式有点儿区别,装饰者模式可以同时享受多重打折策略。而策略者只能只用一种。
装饰者模式与策略者模式有点儿相同但也有区别:两者都是将主要的方法抽象出来做接口,再让具体的子类去实现,不同的是,策略者模式对一个工厂,在工厂里面决定使用的是哪个具体的方法。
下面使用商城打折例子简要说明一下:
package com.usc.lilin.GoodsOnSale_Strategy; import java.util.Date; /** * 商品打折 * 每次只能享受一种打折优惠 * 即使用策略者模式 * @author gaosi * */ public class MainTest { /** * 程序的入口 * @param args */ public static void main(String[] args) { //初始化商品仓库 仓库暂设两样商品 GoodsWareHouse gwh = new GoodsWareHouse(); gwh.addGoods(new Goods("牛奶", 45.0)); gwh.addGoods(new Goods("棉被", 350.0)); //获取时间 Date date = new Date(); int hours = date.getHours(); if(hours<24&&hours>22){ //时间在22 --24时 即在政府补贴的时间段 //暂以去仓库的序列号的商品 Goods goods = gwh.getGoods(0); System.out.println("商品:"+goods.name+" 原价:"+goods.price); StrategyFactory sf = new StrategyFactory(2,goods.price); sf.showMSG(); } //暂以商家的打折优惠这为例 Goods goods = gwh.getGoods(1); System.out.println("商品:"+goods.name+" 原价:"+goods.price); StrategyFactory sf = new StrategyFactory(3,goods.price); sf.showMSG(); } }
package com.usc.lilin.GoodsOnSale_Strategy; /** * 打折的超类 * @author gaosi * */ public interface IDiscountStrategy { /**、 * 享受到的打折的情况 * @return 享受到的打折 */ public String st(); /** * 返回折后价 * @return 折后价 */ public double price(); }
package com.usc.lilin.GoodsOnSale_Strategy; /** * 商品类 * 商品的基本属性:价格(原价),商品名 * @author gaosi * */ public class Goods { /**商品的价格*/ public double price; /**商品的名字*/ public String name; /** * 商品的构造方法 * @param name 名字 * @param price 价格 */ public Goods(String name,double price) { this.price = price; this.name = name; } //提供的可根据需要可对商品的基本实行进行更改的方法 /** * 获取商品的价格 * @return 价格 */ public double getPrice() { return price; } /** * 改变商品的价格 * @param price 价格 */ public void setPrice(double price) { this.price = price; } /** * 获取商品的名字 * @return 商品的名字 */ public String getName() { return name; } /** * 重新设置商品的名字 * @param name */ public void setName(String name) { this.name = name; } }
package com.usc.lilin.GoodsOnSale_Strategy; import java.util.ArrayList; import java.util.List; /** * 商品的仓库 * 用list队列存储来冲当仓库 * @author gaosi * */ public class GoodsWareHouse { /** 仓库队列 */ public List<Goods> list = new ArrayList<>(); /** * 仓库进仓的方法 * @param goods 进仓的商品 */ public void addGoods(Goods goods) { list.add(goods); } /** * 商品出库的方法 * @param goods 出库的商品 */ public Goods getGoods(int i){ return list.remove(i); } }
package com.usc.lilin.GoodsOnSale_Strategy; /** * 打折的超类 * @author gaosi * */ public interface IDiscountStrategy { /**、 * 享受到的打折的情况 * @return 享受到的打折 */ public String st(); /** * 返回折后价 * @return 折后价 */ public double price(); }
package com.usc.lilin.GoodsOnSale_Strategy; /** * 政府的时间段补贴 * 在22:00 -- 23:59时段享受95折优惠 * @author gaosi * */ public class GovernmentDecorator implements IDiscountStrategy { private double price; /** * 构造函数 * 接收商品的原价 * @param price 商品的原价 */ public GovernmentDecorator(double price) { this.price = price; } @Override /** * 返回受到打折的优惠 */ public String st() { // TODO Auto-generated method stub return "政府的时间段补贴"; } /** * 返回折后价 95折 */ @Override public double price() { // TODO Auto-generated method stub return 0.95*price; } }
package com.usc.lilin.GoodsOnSale_Strategy; /** * 商家的打折优惠类 * @author gaosi * */ public class SellerDecorator implements IDiscountStrategy { private double price; public SellerDecorator(double price) { this.price = price; } /** * 返回受到的打折的情况 */ @Override public String st() { return "商家的打折优惠"; } /** * 返回折后价 * 9 折 */ @Override public double price() { return 0.9*price; } }
package com.usc.lilin.GoodsOnSale_Strategy; /** * 网站 商家的优惠 * 每满一百减10 * @author gaosi * */ public class SiteDecorator implements IDiscountStrategy{ private double price; /** * 构造函数加收商品的原价 * @param price */ public SiteDecorator(double price) { this.price = price; } @Override /** * 返回顾客收到的优惠 */ public String st() { // TODO Auto-generated method stub return "网店,商家的优惠"; } /** * 返回商品的折后价 * 每满一百减10 */ @Override public double price() { //将price/100强转为int型,避免出现不足一百的也有优惠的误差 return price-((int)price/100)*10; } }
package com.usc.lilin.GoodsOnSale_Strategy; /** * 打折工厂 * 参数 i 来选择打折方式:1为原价,2 为政府时间段的补贴 * 3 为商家的9折优惠 ,4为网店等商家的满一百减10 的优惠 * 其余其情况为原价 * @author gaosi * */ public class StrategyFactory { private IDiscountStrategy ids; /** * 打折工厂的打折算法选择 * @param i 选择打折算法的参数 * @param price 商品的原价 */ public StrategyFactory(int i,double price) { switch (i) { case 1://原价 ids = new DefultDecorator(price); break; case 2://政府补贴优惠方式 ids = new GovernmentDecorator(price); break; case 3://为商家的9折优惠 ids = new SellerDecorator(price); break; case 4://为网店等商家的满一百减10 的优惠 ids = new SiteDecorator(price); break; default: //其余情况 原价 ids = new DefultDecorator(price); break; } } public void showMSG() { String st = ids.st(); double price = ids.price(); System.out.println("受到的优惠方式:"+st); System.out.println("折后价"+price); } }
相关推荐
普通高中人工智能教学策略初探——基于人脸识别的“人工智能初步”模块教学设计 人工智能是当前最热门的技术之一,对于普通高中学生来说,学习人工智能可以帮助他们更好地适应未来技术的发展。普通高中人工智能教学...
在Delphi中,常见的设计模式包括工厂模式、单例模式、观察者模式、策略模式等。例如,工厂模式提供了一种创建对象的抽象方式,使得代码不依赖具体的类实现;单例模式确保一个类只有一个实例,并提供全局访问点;观察...
论文研究-国有资产管理中的多级诱导模式——多重角色行为初探.pdf, 从现实中广泛存在的多级委托-代理关系入手, 对国有资产管理建立了主从策略模型, 并尝试研究多级管理...
城镇既有社区“医养结合”养老模式初探——以河北邯郸为例.pdf
城市管理模式创新初探——北京市信息化城市管理系统建设.pdf
中职跨境电商人才培养模式的初探——以宁波市为例
在探讨小学道德与法治课堂深度学习的PRE教学模式初探中,首先需要了解PRE教学模式的含义和具体操作。PRE模式是一种以学生学习过程的三个阶段为核心的教学模式,这三个阶段分别是准备阶段(Prepare)、研学阶段...
高职大学英语教学模式改革初探——以内蒙古电子信息职业技术学院为例.pdf
卓越工程师背景下的任务导向教学模式改革初探——以自动化专业“工程制图与CAD”课程为例.pdf
设计模式是面向对象设计的核心组成部分,包括创建型模式(如单例、工厂方法)、结构型模式(如适配器、装饰器)和行为型模式(如观察者、策略)。 在Delphi中,我们可以利用其强大的Object Pascal语言特性来实现...
在这个文档"404-新媒体时代城市旅游营销模式初探——以张家界为例(改后).doc"中,我们可以预见涵盖以下几个关键知识点: 1. **新媒体定义与特点**:新媒体通常指的是互联网、移动通信等数字化媒体形式,其特点是...
本报告的本周专题是“初探零食龙头成功之道——三大模式全对比”。在这个专题中,分析师详细分析了国内零食行业的现状,并将行业内的企业按照其业务模式划分为三类:大品类自产型、多品类自产型和多品类渠道型。通过...
本文以“基于物联网技术的高标准农田建设模式初探——以天津市大钟庄农场为例”为主题,探讨了如何利用物联网技术改造传统农田,打造高标准农田的新模式。 物联网(Internet of Things,IoT)技术的核心是通过各种...
综上所述,促进深度学习的教学模式包括引发兴趣的导入、课前知识预测、直观的教具演示、自主生成概念理解和有梯度的问题设置。这些方法不仅适用于“简单机械”的教学,也可广泛应用于其他科学领域的教育实践中,以...
充电桩的建设和运营需要更明确的商业模式,以吸引更多的投资者。此外,充电桩的分布和利用率需要进一步提高,以解决电动汽车用户的充电焦虑。同时,智能充电网络的构建和远程管理平台的建立也是提升充电桩运营效率的...
《基于SPOC的在线课程教学模式设计初探——以《Java程序设计》为例》这篇文档,探讨了在信息技术日益发达的今天,如何利用SPOC(Small Private Online Course,小规模限制性在线课程)模式优化《Java程序设计》的...
【四方联动】医疗卫生服务模式是深圳市宝安区人民医院集团在应对传统“院办院管”社区卫生管理模式弊端时提出的一种创新尝试。该模式旨在加强医院与社区健康服务中心(社康中心)之间的深度协作,促进专科医生与全科...
这种教学模式下,教师角色由知识传授者转变为引导者和指导者,学习者成为中心,实现更加自主的学习模式。 在《Java程序设计》的具体教学案例中,我们可以看到在线课程教学设计原型被分为三个阶段:课前准备、课堂...
策略模式( Strategy ) 模板方法模式( Template Method ) 观察者模式( Observer ) 迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态...