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{ /** * 公司给某人真正支付工资 * @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@Setterpublic 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{ @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{ @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{ @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@Setterpublic 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 */@Getterpublic 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