博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式-策略模式】
阅读量:6272 次
发布时间:2019-06-22

本文共 4946 字,大约阅读时间需要 16 分钟。

hot3.png

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

 

转载于:https://my.oschina.net/xiehongfei/blog/1799420

你可能感兴趣的文章
【CodeForces 618B】Guess the Permutation
查看>>
【转】如何实现一个配置中心
查看>>
Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】
查看>>
Threejs 官网 - Three.js 的图形用户界面工具(GUI Tools with Three.js)
查看>>
Atitit.Java exe bat 作为windows系统服务程序运行
查看>>
session的生命周期
查看>>
数据库的本质、概念及其应用实践(二)
查看>>
iOS开发多线程--(NSOperation/Queue)
查看>>
php的ajax简单实例
查看>>
maven常用构建命令
查看>>
C#:关联程序和文件
查看>>
推荐科研软件
查看>>
gradle
查看>>
如何取消未知类型文件默认用记事本打开
查看>>
[Javascript] Immute Object
查看>>
Java 关于finally、static
查看>>
Posix mq和SystemV mq区别
查看>>
P6 EPPM Manual Installation Guide (Oracle Database)
查看>>
XMPP协议、IM、客户端互联详解
查看>>
PHP写文件函数
查看>>