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

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

直接上课上的例子,我们购物后需要支付,支付方式可以有多种:支付宝,微信...

└── strategy    ├── AliPay.java    ├── Order.java    ├── Payment.java    ├── PayState.java    ├── PayStrategyTest.java    ├── PayType.java    └── WechatPay.java
package com.xh.pattern.strategy;/** * Created by root on 3/15/18. */public class Order {    private String uid;    private String orderId;    private double amount;    public Order(String uid, String orderId, double amount) {        this.uid = uid;        this.orderId = orderId;        this.amount = amount;    }    //这个参数,完全可以用Payment这个接口来代替    //为什么?    //完美地解决了switch的过程,不需要在代码逻辑中写switch了    //更不需要写if    else if    public PayState pay(PayType payType) {        return payType.get().pay(this.uid, this.amount);    }}
package com.xh.pattern.strategy;/** * Created by root on 3/15/18. */public interface Payment {    public PayState pay(String uid, double amount);}
package com.xh.pattern.strategy;/** * Created by root on 3/15/18. */public enum PayType {    ALI_PAY(new AliPay()),    WECHAT_PAY(new WechatPay());    private Payment payment;    PayType(Payment payment) {        this.payment = payment;    }    public Payment get() {        return this.payment;    }}
package com.xh.pattern.strategy;/** * Created by root on 3/15/18. */public class PayState {    private int code;    private Object data;    private String msg;    public PayState(int code, String msg, Object data) {        this.code = code;        this.data = data;        this.msg = msg;    }    public String toString() {        return ("支付状态:[" + code + "]," + msg + ",交易详情:" + data);    }}
package com.xh.pattern.strategy;/** * Created by root on 3/15/18. */public class AliPay implements Payment {    @Override    public PayState pay(String uid, double amount) {        System.out.println("欢迎使用支付宝");        System.out.println("查询账户余额,开始扣款");        return new PayState(200,"支付成功",amount);    }}
package com.xh.pattern.strategy;/** * Created by root on 3/15/18. */public class WechatPay implements Payment {    @Override    public PayState pay(String uid, double amount) {        System.out.println("欢迎使用微信支付");        System.out.println("直接从微信红包扣款");        return new PayState(200, "支付成功", amount);    }}
package com.xh.pattern.strategy;/** * Created by root on 3/15/18. */public class PayStrategyTest {    public static void main(String[] args) {        //省略把商品添加到购物车,再从购物车下单        //直接从点单开始        Order order = new Order("1", "20180311001000009", 324.45);        //开始支付,选择微信支付、支付宝、银联卡、京东白条、财付通        //每个渠道它支付的具体算法是不一样的        //基本算法固定的        //这个值是在支付的时候才决定用哪个值        System.out.println(order.pay(PayType.WECHAT_PAY));    }}

转载于:https://www.cnblogs.com/lanqie/p/8574783.html

你可能感兴趣的文章
HTML5接入与OC交互
查看>>
Android OutOfMemoryError异常解决方法
查看>>
Qt QAxObject操作excel文件过程总结
查看>>
Go语言数据类型
查看>>
Windows运维之道——PXE备份系统
查看>>
RAID级别
查看>>
ShopNC【B2B2C】多用户电商平台系统,带WAP,微商城,圈子,门户
查看>>
图解lvs的nat设置
查看>>
Ajax+Spring MVC实现跨域请求(JSONP)
查看>>
(精品)快速生成树协议(RSTP)
查看>>
[ogre] ogre+vs2012环境搭建【转】
查看>>
163邮箱设置smtp密码步骤
查看>>
Nagios监控基本配置(二)
查看>>
C# 读写文件
查看>>
nginx网站防盗链
查看>>
品牌整合营销传播应该这样走
查看>>
Confluence 6 导入一个 Confluence 站点
查看>>
磁盘管理
查看>>
使用 Redis 实现分布式速率限制
查看>>
(Spring Cloud微服务实战-书中之坑)spring cloud eureka报错host name may not be null
查看>>