【设计模式-策略模式】
2018-04-22 23:15
274 查看
package com.dusty.boring.strategy._native.paymentstrategy; /** * <策略接口定义> * * @author: xiehongfei[humphreytes@gmail.com] * @date: 2018年04月22日 22:11 * @version: V1.0 * @review: xiehongfei[humphreytes@gmail.com]/2018年04月22日 22:11 */ public interface PaymentStrategy<T extends AbstractPaymentContext> { /** * 公司给某人真正支付工资 * @param ctx 支付工资的上下文,里面包含算法需要的数据 */ public void pay(T ctx); }
package com.dusty.boring.strategy._native.paymentstrategy; import com.dusty.boring.strategy._native.Strategy; import lombok.Getter; import lombok.Setter; /** * <抽象策略上下文类> * 支付工资 * 持有一种策略及上下文属性 * 定义抽象立即支付方法 * * @author: xiehongfei[humphreytes@gmail.com] * @date: 2018年04月22日 22:28 * @version: V1.0 * @review: xiehongfei[humphreytes@gmail.com]/2018年04月22日 22:28 */ @Getter @Setter public abstract class AbstractPaymentContext { /** * 员工姓名 */ private String employeeName; /** * 工资金额 */ private double money = 0.00; /** * 工资支付策略 */ private PaymentStrategy strategy; public AbstractPaymentContext(String employeeName, double money, PaymentStrategy strategy){ this.employeeName = employeeName; this.money = money; this.strategy = strategy; } public abstract void payNow(); }
package com.dusty.boring.strategy._native.paymentstrategy; /** * <支付策略人民币支付工资策略> * * @author: xiehongfei[humphreytes@gmail.com] * @date: 2018年04月22日 22:13 * @version: V1.0 * @review: xiehongfei[humphreytes@gmail.com]/2018年04月22日 22:13 */ public class RMBCashPayStrategy implements PaymentStrategy<CashPaymentContext> { @Override public void pay(CashPaymentContext ctx) { System.out.println("现在给" + ctx.getEmployeeName() + "支付人民币现金" + ctx.getMoney()); } }
package com.dusty.boring.strategy._native.paymentstrategy; /** * <工资支付策略-美元支付> * * @author: xiehongfei[humphreytes@gmail.com] * @date: 2018年04月22日 22:16 * @version: V1.0 * @review: xiehongfei[humphreytes@gmail.com]/2018年04月22日 22:16 */ public class DollarCashStrategy implements PaymentStrategy<CashPaymentContext> { @Override public void pay(CashPaymentContext ctx) { System.out.println("现在给" + ctx.getEmployeeName() + "支付美元现金" + ctx.getMoney()); } }
package com.dusty.boring.strategy._native.paymentstrategy; /** * <卡支付策略> * * @author: xiehongfei[humphreytes@gmail.com] * @date: 2018年04月22日 22:53 * @version: V1.0 * @review: xiehongfei[humphreytes@gmail.com]/2018年04月22日 22:53 */ public class CardStrategy implements PaymentStrategy<CardPaymentContext> { @Override public void pay(CardPaymentContext ctx) { System.out.println("支付给" + ctx.getEmployeeName() + "工资卡" + ctx.getBankCardNo() + "共计" + ctx.getMoney()); } }
package com.dusty.boring.strategy._native.paymentstrategy; import lombok.Getter; import lombok.Setter; /** * <工资卡支付上下文> * * @author: xiehongfei[humphreytes@gmail.com] * @date: 2018年04月22日 22:27 * @version: V1.0 * @review: xiehongfei[humphreytes@gmail.com]/2018年04月22日 22:27 */ @Getter @Setter public class CardPaymentContext extends AbstractPaymentContext { private String bankCardNo; public CardPaymentContext(String employeeName, double money, String bankCardNo, PaymentStrategy strategy) { super(employeeName, money, strategy); this.bankCardNo = bankCardNo; } @Override public void payNow() { getStrategy().pay(this); } }
package com.dusty.boring.strategy._native.paymentstrategy; import lombok.Getter; /** * <现金支付上下文> * * @author: xiehongfei[humphreytes@gmail.com] * @date: 2018年04月22日 22:13 * @version: V1.0 * @review: xiehongfei[humphreytes@gmail.com]/2018年04月22日 22:13 */ @Getter public class CashPaymentContext extends AbstractPaymentContext { public CashPaymentContext(String employeeName, double money, PaymentStrategy strategy) { super(employeeName, money, strategy); } /** * 立即支付工资 */ @Override public void payNow() { super.getStrategy().pay(this); } }
package com.dusty.boring.strategy._native.paymentstrategy; /** * <策略代码测试> * * @author: xiehongfei[humphreytes@gmail.com] * @date: 2018年04月22日 22:22 * @version: V1.0 * @review: xiehongfei[humphreytes@gmail.com]/2018年04月22日 22:22 */ public class Client { /** * 测试入口方法 * @param args 参数 */ public static void main(String... args) { PaymentStrategy rmbPayStrategy = new RMBCashPayStrategy(); CashPaymentContext ctx = new CashPaymentContext("张三", 10000, rmbPayStrategy); ctx.payNow(); PaymentStrategy dollarPayStrategy = new DollarCashStrategy(); CashPaymentContext ctx1 = new CashPaymentContext("李四", 4000, dollarPayStrategy); ctx1.payNow(); PaymentStrategy cardPayStrategy = new CardStrategy(); CardPaymentContext ctx2 = new CardPaymentContext("王五", 5000, "1-001-008-990", cardPayStrategy); ctx2.payNow(); } }
##运行结果: 现在给张三支付人民币现金10000.0 现在给李四支付美元现金4000.0 支付给王五工资卡1-001-008-990共计5000.0
相关文章推荐
- 设计模式之策略模式
- 设计模式初析 - 策略模式
- 设计模式之我见--2 策略模式
- 设计模式之策略模式
- Java设计模式——策略模式
- Android设计模式 -- 巧用策略模式告别过多的 if...else...
- php设计模式——策略模式
- 【设计模式】策略模式
- 设计模式之策略模式(Strategy Model)
- 设计模式学习(简单工厂、策略模式、单一职责、开闭原则)
- 研磨设计模式之 策略模式-2
- Android设计模式系列—策略模式
- 设计模式-策略模式
- 设计模式之策略模式
- 设计模式(1)----策略模式
- 设计模式解析与实战之策略模式
- 设计模式之策略模式
- Java设计模式--策略模式【Strategy Pattern】
- 【设计模式】策略模式
- 策略设计模式