经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
策略模式精讲
来源:cnblogs  作者:~无崖子~  时间:2018/10/8 9:19:52  对本文有异议

策略模式是一种行为型模式,他的特点就是执行流程固定,但中间的步骤有一些差别;运行的时候才确定。官方的意思是:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。下面使用穷举法举几个简单理解的例子:

1.诸葛亮的锦囊妙计,每一个锦囊就是一个策略.

2.旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 

3.固定算法的封装等等。

4.网上购物买东西选择支付方式。

场景:根据用户的需求处理数据时候需要对算法做出选择,固定的一些算法,但是可以扩展。

下面有一个选择支付方式的代码进行演示:

  1. package pattern.strategy.pay.payport;
  2. import pattern.strategy.pay.PayState;
  3. /**
  4. * 支付渠道
  5. */
  6. public interface Payment {
  7. public PayState pay(String uid,double amount);
  8. }
  1. package pattern.strategy.pay.payport;
  2. public enum PayType {
  3. ALI_PAY(new AliPay()),
  4. WECHAT_PAY(new WechatPay()),
  5. UNION_PAY(new UnionPay()),
  6. JD_PAY(new JDPay());
  7. private Payment payment;
  8. PayType(Payment payment){
  9. this.payment=payment;
  10. }
  11. public Payment get(){
  12. return this.payment;
  13. }
  14. }
  1. package pattern.strategy.pay.payport;
  2. import pattern.strategy.pay.PayState;
  3. public class AliPay implements Payment {
  4. @Override
  5. public PayState pay(String uid, double amount) {
  6. System.out.println("欢迎使用支付宝");
  7. System.out.println("查询账户余额,开始扣款");
  8. return new PayState(200,"支付成功",amount);
  9. }
  10. }
  1. package pattern.strategy.pay.payport;
  2. import pattern.strategy.pay.PayState;
  3. public class JDPay implements Payment {
  4. @Override
  5. public PayState pay(String uid, double amount) {
  6. System.out.println("欢迎使用京东支付");
  7. System.out.println("查询账户余额,开始扣款");
  8. return new PayState(200,"支付成功",amount);
  9. }
  10. }
  1. package pattern.strategy.pay.payport;
  2. import pattern.strategy.pay.PayState;
  3. public class UnionPay implements Payment {
  4. @Override
  5. public PayState pay(String uid, double amount) {
  6. System.out.println("欢迎使用银联支付");
  7. System.out.println("查询账户余额,开始扣款");
  8. return new PayState(200,"支付成功",amount);
  9. }
  10. }
  1. package pattern.strategy.pay.payport;
  2. import pattern.strategy.pay.PayState;
  3. public class WechatPay implements Payment {
  4. @Override
  5. public PayState pay(String uid, double amount) {
  6. System.out.println("欢迎使用微信支付");
  7. System.out.println("查询账户余额,开始扣款");
  8. return new PayState(200,"支付成功",amount);
  9. }
  10. }
  1. package pattern.strategy.pay;
  2. import pattern.strategy.pay.payport.PayType;
  3. public class Order {
  4. private String uid;
  5. private String orderId;
  6. private double amount;
  7. public Order(String uid,String orderId,double amount){
  8. this.uid=uid;
  9. this.orderId=orderId;
  10. this.amount=amount;
  11. }
  12. public PayState pay(PayType payType){
  13. return payType.get().pay(this.uid,this.amount);
  14. }
  15. }
  1. package pattern.strategy.pay;
  2. public class PayState {
  3. private int code;
  4. private Object data;
  5. private String msg;
  6. public PayState(int code,String msg,Object data){
  7. this.code=code;
  8. this.msg=msg;
  9. this.data=data;
  10. }
  11. public String toString() {
  12. return ("支付状态:["+code+"],"+msg+",交易详情:"+data);
  13. }
  14. }
  1. package pattern.strategy;
  2. import pattern.strategy.pay.Order;
  3. import pattern.strategy.pay.payport.PayType;
  4. public class StrategyTest {
  5. public static void main(String[] args) {
  6. Order order=new Order("1","22233333",320);
  7. System.out.println(order.pay(PayType.ALI_PAY));
  8. }
  9. }

测试结果:

  1. 欢迎使用支付宝
  2. 查询账户余额,开始扣款
  3. 支付状态:[200],支付成功,交易详情:320.0

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号