策略模式精讲
2018-10-06 08:06:21来源:博客园 阅读 ()
策略模式是一种行为型模式,他的特点就是执行流程固定,但中间的步骤有一些差别;运行的时候才确定。官方的意思是:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。下面使用穷举法举几个简单理解的例子:
1.诸葛亮的锦囊妙计,每一个锦囊就是一个策略.
2.旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
3.固定算法的封装等等。
4.网上购物买东西选择支付方式。
场景:根据用户的需求处理数据时候需要对算法做出选择,固定的一些算法,但是可以扩展。
下面有一个选择支付方式的代码进行演示:
package pattern.strategy.pay.payport; import pattern.strategy.pay.PayState; /** * 支付渠道 */ public interface Payment { public PayState pay(String uid,double amount); }
package pattern.strategy.pay.payport; public enum PayType { ALI_PAY(new AliPay()), WECHAT_PAY(new WechatPay()), UNION_PAY(new UnionPay()), JD_PAY(new JDPay()); private Payment payment;
PayType(Payment payment){ this.payment=payment; } public Payment get(){ return this.payment; } }
package pattern.strategy.pay.payport; import pattern.strategy.pay.PayState; 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 pattern.strategy.pay.payport; import pattern.strategy.pay.PayState; public class JDPay implements Payment { @Override public PayState pay(String uid, double amount) { System.out.println("欢迎使用京东支付"); System.out.println("查询账户余额,开始扣款"); return new PayState(200,"支付成功",amount); } }
package pattern.strategy.pay.payport; import pattern.strategy.pay.PayState; public class UnionPay implements Payment { @Override public PayState pay(String uid, double amount) { System.out.println("欢迎使用银联支付"); System.out.println("查询账户余额,开始扣款"); return new PayState(200,"支付成功",amount); } }
package pattern.strategy.pay.payport; import pattern.strategy.pay.PayState; 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 pattern.strategy.pay; import pattern.strategy.pay.payport.PayType; 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; } public PayState pay(PayType payType){ return payType.get().pay(this.uid,this.amount); } }
package pattern.strategy.pay; public class PayState { private int code; private Object data; private String msg; public PayState(int code,String msg,Object data){ this.code=code; this.msg=msg; this.data=data; } public String toString() { return ("支付状态:["+code+"],"+msg+",交易详情:"+data); } }
package pattern.strategy; import pattern.strategy.pay.Order; import pattern.strategy.pay.payport.PayType; public class StrategyTest { public static void main(String[] args) { Order order=new Order("1","22233333",320); System.out.println(order.pay(PayType.ALI_PAY)); } }
测试结果:
欢迎使用支付宝
查询账户余额,开始扣款
支付状态:[200],支付成功,交易详情:320.0
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 如何干掉 if else 策略+工厂 2020-06-11
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash