首页 / 设计模式 / 设计模式六 策略模式
设计模式六 策略模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式六 策略模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2344字,纯文字阅读大概需要4分钟。
内容图文
![设计模式六 策略模式](/upload/InfoBanner/zyjiaocheng/1127/682a394aacb74eb6bc91430cff2b9648.jpg)
0、 基本定义
定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法对变化,不会影响到使用算法到客户。
通俗的讲,场景有如下一些:旅行的路线、登入方式、爬虫的目标网站、支付渠道。。。
spring 中 BeanFacotry 中有使用。
本文场景选用 支付渠道
1、代码
Order.java
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(Payment payment) { //// return payment.pay(uid, amount); // } //完全可以用Payment接口代替, but why? //解决了 switch 的过程,和if elsepublic PayState pay(PayType payType) { return payType.get().pay(uid, amount); } }
Payment.java
public interface Payment { // TODO 每次新增支付渠道,就需要维护, enum public final static Payment ALI_PAY = new AliPay(); publicfinalstatic Payment WECHAT_PAY = new WechatPay(); publicfinalstatic Payment JD_PAY = new JDPay(); PayState pay(String uid, double amount); } publicclass AliPay implements Payment { @Override public PayState pay(String uid, double amount) { System.out.println("AliPay 支付"); System.out.println("开始扣款"); returnnew PayState(200, "支付成功", null); } } publicclass JDPay implements Payment { @Override public PayState pay(String uid, double amount) { System.out.println("AliPay 支付"); System.out.println("开始扣款"); returnnew PayState(200, "支付成功", null); } } publicclass WechatPay implements Payment { @Override public PayState pay(String uid, double amount) { System.out.println("JD baitiao 支付"); System.out.println("开始扣款"); returnnew PayState(200, "支付成功", null); } }
PayType.java 对用户操作对优化
public enum PayType { ALI_PAY( new AliPay()), WECHAT_PAY( new WechatPay()), JD_PAY( new JDPay()); private Payment payment; PayType(Payment payment) { this.payment = payment; } public Payment get() { returnthis.payment; } }
Test
public class PayStrategyTest { public static void main(String[] args) { // 订单 Order order = new Order("1", "201808200000001", 100); //支付选择.微信,支付宝,京东白条 //每个支付渠道有特定的算法。 //基本算法固定 //用户决定 支付渠道 // PayState pay = order.pay(new AliPay()); PayState pay = order.pay(PayType.JD_PAY); System.out.println(pay); } }
uml 图
2、总结
用户只需 从定义的算法中进行 选择
2.1 优点
》避免了 很多的 switch 和 if else 的代码判断
》算法可以自由切换
》容易扩展
========================================
现在发现,更像是看了咕泡学院视频后的一些笔记,方便自己以后查找。
单独的设计模式容易写,但现在场景中都是 混合模式的。
========================================
参考资料:
咕泡学院
《大话设计模式》
《设计模式之蝉》
原文:https://www.cnblogs.com/idea-persistence/p/9539251.html
内容总结
以上是互联网集市为您收集整理的设计模式六 策略模式全部内容,希望文章能够帮你解决设计模式六 策略模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。