一模式定义
策略模式:定义一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化。
二模式举例
1模式分析
我们借用商场促销商品来说明这一模式。
2策略模式静态类图
3代码示例
3.1 创建策略接口一IStrategy
package com.demo.strategy; /** * 策略接口 * * @author * */ public interface IStrategy { /** * 计算实际价格方法 * * @param consumePrice * 消费金额 * @return */ public double realPrice(double consumePrice); }
3.2 八折促销策略一RebateStrategy
package com.demo.strategy; /** * 打八折商品促销策略 * * @author * */ public class RebateStrategy implements IStrategy { private final double rate; /** * 构造方法设置打折率 */ public RebateStrategy() { this.rate = 0.8; } /** * 计算实际价格方法 * * @param consumePrice * 消费金额 * @return */ public double realPrice(double consumePrice) { return consumePrice * this.rate; } }
3.3 满1000减200促销策略一ReduceStrategy
package com.demo.strategy; /** * 满1000减200 商品促销策略 * * @author * */ public class ReduceStrategy implements IStrategy { /** * 计算实际价格方法 * * @param consumePrice * 消费金额 * @return */ public double realPrice(double consumePrice) { if (consumePrice >= 1000) { return consumePrice - 200; } else { return consumePrice; } } }
3.4 200以上部分打8折促销策略一PromotionalStrategy
package com.demo.strategy; /** * 满200,高于200部分打八折 商品促销策略 * * @author * */ public class PromotionalStrategy implements IStrategy { /** * 计算实际价格方法 * * @param consumePrice * 消费金额 * @return */ public double realPrice(double consumePrice) { if (consumePrice > 200) { return 200 + (consumePrice - 200) * 0.8; } else { return consumePrice; } } }
3.5 创建上下文环境一Context
package com.demo.context; import java.math.BigDecimal; import com.demo.strategy.IStrategy; /** * 上下文环境 * * @author * */ public class Context { // 当前策略 private IStrategy strategy; // 设置当前策略 public void setStrategy(IStrategy strategy) { this.strategy = strategy; } // 使用策略计算价格 public double cul(double consumePrice) { // 使用具体商品促销策略获得实际消费金额 double realPrice = this.strategy.realPrice(consumePrice); // 格式化保留小数点后1位,即:精确到角 BigDecimal bd = new BigDecimal(realPrice); bd = bd.setScale(1, BigDecimal.ROUND_DOWN); return bd.doubleValue(); } }
3.6 消费者购物消费一Client
package com.demo; import java.util.Random; /** * 客户端应用程序 * * @author * */ public class Client { /** * @param args */ public static void main(String[] args) { // 创建上下问环境对象实例 // Context context = new Context(); // 随机数对象 Random random = new Random(); for (int i = 0; i < 10; i++) { // 产生随机数的方式判断使用何种促销策略 int x = random.nextInt(3); // 消费价格也是由随机数产生的(不能为0) double consumePrice = 0; while ((consumePrice = random.nextInt(2000)) == 0) { } double realPrice = consumePrice; switch (x) { case 0: // 打八折商品 // context.setStrategy(new RebateStrategy()); realPrice = consumePrice * 0.8; break; case 1: // 满200,高于200部分打八折 商品 // context.setStrategy(new PromotionalStrategy()); if (consumePrice > 200) { realPrice = 200 + (consumePrice - 200) * 0.8; } break; case 2: // 满1000减200 商品 // context.setStrategy(new ReduceStrategy()); if (consumePrice >= 1000) { realPrice = consumePrice - 200; } break; } System.out.print("【" + (x == 0 ? "打八折" : (x == 1 ? "高于200部分打八折" : (x == 2 ? "满1000减200" : ""))) + "】商品:"); System.out.println("原价:" + consumePrice + " - 优惠后价格:" + realPrice); } } }
4运行结果
【满1000减200】商品:原价:908.0 - 优惠后价格:908.0
【满1000减200】商品:原价:1129.0 - 优惠后价格:929.0
【满1000减200】商品:原价:829.0 - 优惠后价格:829.0
【打八折】商品:原价:518.0 - 优惠后价格:414.40000000000003
【满1000减200】商品:原价:1230.0 - 优惠后价格:1030.0
【打八折】商品:原价:106.0 - 优惠后价格:84.80000000000001
【满1000减200】商品:原价:1134.0 - 优惠后价格:934.0
【高于200部分打八折】商品:原价:664.0 - 优惠后价格:571.2
【满1000减200】商品:原价:564.0 - 优惠后价格:564.0
【满1000减200】商品:原价:730.0 - 优惠后价格:730.0
三该模式设计原则
1"开-闭"原则
2单一职责原则
四使用场合
1当多个类的表现行为不同,需要在运行时刻动态选择具体执行的行为的时候。
2需要在不同情况下使用不同策略,或者策略还可能在未来用其它方式实现的时候。
3需要隐藏具体策略的实现细节,各个具体策略彼此独立的时候。
4当一个类中出现了多种行为,而且在一个操作中使用多个条件分支来判断使用多种行为的时候,可以使用策略模式将各个条件分支的动作植入具体策略中实现。
五策略模式静态类图
相关推荐
下面是一个使用策略模式解决商场促销商品问题的代码示例: 3.1 创建策略接口 ```java package com.demo.strategy; / * 策略接口 * * @author */ public interface IStrategy { / * 计算实际价格方法 * * ...
《商场促销:深入理解策略模式》 在软件设计中,策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在这个例子中,我们关注的是商场促销活动,这是一个经常需要根据具体情况调整策略的场景。策略模式...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,有时我们需要根据不同的...在商场管理软件的场景中,策略模式使得添加新的促销策略变得简单,只需新增一个策略类即可,无需改动其他代码。
它可能包含了多种商品类型的结账逻辑,比如普通商品、打折商品、促销商品等。每种商品的结账规则可能不同,这就需要有相应的类来表示这些商品并执行不同的计算方法。 C++是一种强大的面向对象编程语言,非常适合...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Head First的设计模式系列书籍中,"策略模式(headfirst note)"章节深入浅出地介绍了如何使用这种模式来处理复杂的问题,通过将算法家族封装在各自...
【压缩包子文件的文件名称列表】中,"TITA鞋店.gif"可能是一个展示TITA鞋店促销活动的动态图像,可能包含了店内的布置、促销商品的展示、活动海报等内容,用于分析具体的促销实践。"促销模式精选.xls"很可能是一个...
打折功能允许商场根据策略或促销活动为顾客提供价格优惠,可以是固定金额折扣、百分比折扣或其他形式。积分计算则是为了实施顾客忠诚度计划,通过购买商品累积积分,顾客可以在未来消费时兑换奖励,从而刺激复购率。...
摘要:本文主要对孩子王的促销策略进行了分析和研究,该公司是国内知名的母婴童商品专营连锁零售商之一。文章首先对零售行业的发展和母婴童零售企业的现状进行了概述,然后对孩子王的发展史和业务模式进行了介绍,...
【IKEA商品促销策略研究】 IKEA,全称Ingvar Kamprad Elmtaryd Agunnaryd,是由瑞典企业家坎普拉德于1943年创立的家居品牌,最初涉及文具和杂货业务,后专注于家具产业。经过几十年的发展,IKEA已经成为全球最大的...
综合以上,全返模式积分返模式二合一源码商城是一个结合了两种促销策略的电子商务解决方案,提供了源代码供用户自定义和运营,其中"0501积分"文件可能涉及了关键的积分管理功能。对于想要构建特色电商系统的开发者和...
根据市场需求和商品特性,选择具有高性价比或季节性的商品进行促销,可以提高促销的有效性,同时避免对非促销商品销售的影响。 总的来说,这篇论文深入剖析了百姓超市的促销策略,从理论到实践,提出了一系列有价值...
Java策略模式实现简单购物车功能,这是一种将不同的支付策略(如信用卡支付和Paypal支付)进行抽象和封装的方法。策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换,让算法独立于...
《品类管理之商品结构调整策略》 在当今激烈的零售市场竞争中,民营超市面临着诸多挑战。传统的经营模式已无法适应现代连锁门店的管理需求。商品结构调整策略成为提升门店竞争力的关键。本课件由讲师陈厚华讲解,...
该模式的核心是与中高端品牌合作,提供有限时间的促销活动,吸引消费者购买高品质的正品商品。这种模式的优点是可以提高用户粘性,精准市场定位,简化购物流程。该模式的成功之处就在于能够满足消费者的需求,提供高...
暑假商场促销实践报告是大学生了解社会、锻炼自我能力的重要途径之一。通过参与商场促销活动,学生可以在实际操作中学习到以下关键知识点: 1. 社会经验:在招聘市场上,“有经验者优先”已经成为常态。暑假实践让...
- **定义**:免费策略是电子商务中常用的一种策略,通过提供免费的产品或服务来吸引大量用户访问网站,进而转化为付费用户或购买其他商品。 - **优势**:免费策略可以快速积累用户基数,增加品牌曝光度,提升用户...
假设在一个商场收银系统中,需要根据不同的促销策略计算商品的价格。这些策略可能包括正常价格、打折价格、满减活动等。为了实现这些功能,我们可以使用策略模式来封装每种不同的价格计算方法。 #### 三、策略模式...
网络促销策略是现代商业活动中不可或缺的一部分,尤其在数字化时代,它已经成为企业与消费者互动的重要手段。网络促销策略的核心在于利用互联网技术和平台来传递商品和服务信息,激发消费者需求,促进购买行为。 **...
网络营销的促销策略是企业在互联网环境下,利用数字技术和网络平台来推广产品和服务的一种市场营销方式。它与传统的促销手段相比,具有显著的特性和优势。 网络营销促销的内涵主要体现在以下几个方面: 1. 特点:...