策略模式精讲
程序员文章站
2022-08-09 09:10:54
策略模式是一种行为型模式,他的特点就是执行流程固定,但中间的步骤有一些差别;运行的时候才确定。官方的意思是:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。下面使用穷举法举几个简单理解的例子: 1.诸葛亮的锦囊妙计,每一个锦囊就是一个策略. 2.旅行的出游方式,选择骑自行车、坐汽车, ......
策略模式是一种行为型模式,他的特点就是执行流程固定,但中间的步骤有一些差别;运行的时候才确定。官方的意思是:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。下面使用穷举法举几个简单理解的例子:
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
上一篇: 数字格式字符串转数字保留后面0
下一篇: 画吧怎么画画 教你做绘画大神