在生活当中,有一些情况是只能在多种可能选择下只能有一中情况发生。比如说是在某一个商城的打折,在做种打折策略情况下,商城只允许只用其中一种打折策略,这时候尅考虑使用策略者模式。这跟装饰这模式有点儿区别,装饰者模式可以同时享受多重打折策略。而策略者只能只用一种。
装饰者模式与策略者模式有点儿相同但也有区别:两者都是将主要的方法抽象出来做接口,再让具体的子类去实现,不同的是,策略者模式对一个工厂,在工厂里面决定使用的是哪个具体的方法。
下面使用商城打折例子简要说明一下:
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 ) 状态...