java策略模式

发布时间:2025-03-01 01:48

《我的世界》创造模式下,策略规划建筑 #生活乐趣# #游戏乐趣# #策略游戏#

其他设计模式
java单例模式
java建造者模式
java策略模式
java代理模式
java观察者模式
java适配器模式
java外观模式

模式的定义

策略模式定义了一系列的算法,并将每一个算法封装起来,而且它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

使用场景 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。需要安全的封装多种同一类型的操作时。出现同一抽象多个子类,而又需要使用if-else 或者 switch-case来选择时。 实现方式 举例说明

A旗舰店除了正常日不打折,在节假日会推出满300减100,全场8折等活动

步骤1:定义抽象策略角色(Strategy):现金收费抽象类

abstract class CashSuper { public abstract double acceptCash(double money); }123 步骤2:定义具体策略角色(Concrete Strategy):每个节日具体的促销活动

正常收费类

public class CashNormal extends CashSuper{ @Override public double acceptCash(double money) { return money; } }123456

打折收费类

public class CashRebate extends CashSuper{ private double moneyRebate=1; public CashRebate(double moneyRebate){ this.moneyRebate=moneyRebate; //如八折时,传入0.8 } @Override public double acceptCash(double money) { return money*moneyRebate; } }12345678910

满减收费类

public class CashReduce extends CashSuper{ private double moneyCondition=0; private double moneyReduce=0; public CashReduce(double moneyCondition, double moneyReduce) { //如满300减100,传入300,100 this.moneyCondition = moneyCondition; this.moneyReduce = moneyReduce; } @Override public double acceptCash(double money) { double result=money; if (money>moneyCondition){//若大于满减条件,减去满减值 result=money-Math.floor(money/moneyCondition)*moneyReduce; } return result; } }

123456789101112131415161718 步骤3:定义环境角色(Context):用于连接上下文,即把促销活动推销给客户,这里可以理解为销售员

public class CashContext { private CashSuper cs = null; public CashContext(String type) { switch (type) { case "normal": CashNormal cashNormal = new CashNormal(); cs = cashNormal; break; case "rebate": CashRebate cashRebate = new CashRebate(0.8); cs = cashRebate; break; case "reduce": CashReduce cashReduce = new CashReduce(300, 100); cs = cashReduce; break; } } public double getResult(double money) { return cs.acceptCash(money); } }

123456789101112131415161718192021222324 步骤4:客户端调用

public class SalesMan { public static void main(String[] args) { CashContext mSalesMan; //平常不打折,消费了1000 mSalesMan = new CashContext("normal"); double normalResult = mSalesMan.getResult(1000); System.out.println("平常:" + normalResult); //国庆打8折,消费了1000 mSalesMan = new CashContext("rebate"); double rebateResult = mSalesMan.getResult(1000); System.out.println("国庆:" + rebateResult); //元旦满30减100,消费了1000 mSalesMan = new CashContext("reduce"); double reduceResult = mSalesMan.getResult(1000); System.out.println("元旦:"+reduceResult); } }

1234567891011121314151617181920212223

输出结果
平常:1000.0
国庆:800.0
元旦:700.0

优点: 结构清晰明了、使用简单直观。耦合度相对而言较低,扩展方便。操作封装也更为彻底,数据更为安全。 缺点: 随着策略的增加,子类也会变得繁多。

网址:java策略模式 https://www.yuejiaxmz.com/news/view/799980

相关内容

设计模式:策略(Strategy)模式
C++ 设计模式之策略模式
重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」
行为型设计模式之策略模式(Strategy)
【JAVA】Java高级:Java中的常用设计模式——设计模式的基本思想与应用场景
【设计模式】行为型模式其九: 策略模式行为型模式其九: 《策略模式》 生活实例 当我们出行旅游时, 可以选择多种出行方式
基于Java的智能家居设计:云端智能家居平台与Java集成策略
【设计模式】策略模式 ( 简介
策略模式
基于Java的智能家居设计:设计基于Java的智能照明系统的策略与挑战

随便看看