策略模式的理解

  • 策略模式
    • 什么是策略模式
    • 策略模式的重点理解
    • 简单代码示例
    • 策略模式图解
    • 策略模式的优势
    • 策略模式的使用场景
    • 总结

策略模式

什么是策略模式

策略模式(Strategy Pattern) 也叫作**政策模式(Policy)**是指定义了算法组并分别封装起来,让他们可以互相替换使得算法的更改并不会影响使用了算法的用户。策略模式属于行为性设计模式,在策略模式中,一个类的行为及算法可以在运行时更改。

策略模式的重点理解

策略模式重在抽象行为,即将行为抽象为具体的类,调用的时候动态选择行为,策略模式不同策略之间可以相互替换,并不影响最终结果,比如定义不同算法,不同算法之间虽然逻辑不同,但要求执行结果一样,所以策略模式多用于封装算法

简单代码示例

一个商店有三种用户:普通用户、vip用户、svip用户
普通用户:不打折,原价购买
vip用户:9折购买
svip用户:8折购买
如果不使用策略模式我们可能会这样写

public class NoStrategy {//user是用户等级,money是用户支付的金额public double A(String user,double money){if("svip用户" == user){return money*0.8;}else if("vip用户" == user) {return money * 0.9;} else return money;}
}

如果使用策略模式
1.定义一个策略的父接口

public interface Strategy {String returnUserMoney(double money);
}

2.针对三种用户都制定一个策略(每个策略必须实现父接口)
普通用户的策略

public class StrategyA implements Strategy {@Overridepublic String returnUserMoney(double money) {return "普通用户支付:"+money;}
}

vip用户的策略

public class StrategyB implements Strategy{@Overridepublic String returnUserMoney(double money) {return "vip用户支付"+money*0.9;}
}

svip用户的策略

public class StrategyC implements Strategy{@Overridepublic String returnUserMoney(double money) {return "svip用户支付:"+0.8*money;}
}

策略模式图解

策略模式的优势

看了上面的代码示例发现策略模式加大了我们的代码量,那为啥我们要采用策略模式呢?
1.使用策略模式更符合我们程序高内聚低耦合的特点
2.使用策略模式的扩展性,也就是 OCP 原则,增加需求,改变需求,只需要对策略类的增改而不需要去改其他地方的代码

策略模式的使用场景

  • 当同一类型的问题有多种处理方式,而仅仅是具体的行为有差别时。
  • 出现同一个算法,有多种不同的实现情况时,可以使用策略模式来把这些“不同的实现”实现成为一个算法的类层次。
  • 出现同一抽象类有多个子类,而又需要使用 if-else 或者 switch-case 来选 - 择具体子类时。
  • 出现抽象一个定义了很多行为的类,而又需要使用 if-else 或者 switch-case 来选择行为时。

总结

策略模式主要用来分离算法,在相同的行为抽象下有不同的具体实现策略。
策略模式的本质是:分离算法,选择实现

策略模式的理解与应用相关推荐

  1. 我对模板模式和策略模式的理解

    模板:每个人基本上都是幼儿园小学中学大学等 策略:从上海到武汉我可以坐飞机,可以坐火车,可以开车.可以火车+飞机.可以开车加骑车. 转载于:https://www.cnblogs.com/woaini ...

  2. php 策略模式实现原理,php 策略模式原理与应用深入理解

    php 策略模式原理与应用深入理解,策略,可以用,接口,简单,算法 php 策略模式原理与应用深入理解 易采站长站,站长之家为您整理了php 策略模式原理与应用深入理解的相关内容. 本文实例讲述了ph ...

  3. php 策略模式 理解

    策略模式 简单理解就是 有n个做法供你选择,根据你的需要选择某个策略得到结果 就应用场景来说: 例1:比如购买商品需要支付,你可以提供 微信支付.支付宝支付.支付通支付....(不同的支付方式就是不同 ...

  4. 策略模式(Header-First笔记)

    个人网站www.itiask.com  专业问答网站,基于我记录框架开发 策略模式和设计原则(主要是自己的笔记:水平较低,请勿语言攻击) 如果想理解的深入建议深入的读读headfirst,这个真有用, ...

  5. Android使用的设计模式2——策略模式

    今天讲解一下策略模式,策略模式也是很常用的设计模式,对多种算法或者数据结构选择使用的情况下,经常会使用策略模式来管理这些算法.下面会简单讲解一下策略模式的概念和基本实现.然后结合Android里面的实 ...

  6. 还在使用if else写代码?试试 “策略模式” 吧!

    我们使用的app大多都有分享的功能,我们可以选择分享到不同的地方,比如微博.微信.QQ等等,虽然是同一个内容,但是分享到不同的平台就会有不同的处理方式,比如要跳转到不同的app或者直接复制链接等等.如 ...

  7. 还在用 if else?试试策略模式吧!

    作者 | LA 来源 | 程序员小灰(ID:chengxuyuanxiaohui) 我们使用的App大多都有分享的功能,我们可以选择分享到不同的地方,比如微博.微信.QQ等等,虽然是同一个内容,但是分 ...

  8. 设计模式学习之策略模式(Strategy,行为型模式)(13)

    转载地址:http://www.cnblogs.com/zhili/p/StragetyPattern.html 一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方 ...

  9. 设计模式-优惠券-策略模式

    策略模式定义与实现 策略模式的定义 ​ 首先我们可以先看一下策略模式的定义: Define a family of algorithms,encapsulate each one,and make t ...

最新文章

  1. Python实现前端AES加密方式分析,***密码学必备!
  2. jquery给元素添加样式表的方法
  3. Visual Studio代码中的多个游标[关闭]
  4. Win2008 r2 iis7/iis7.5系统下HTTP重定向(301重定向)图文方法
  5. AgileEAS.NET平台视频会议培训第二辑-简单插件开发应用演练(速度下载)
  6. Python之Idel利器jupyter notebook
  7. 具有Spring的简单工作流引擎
  8. 【算法系列之三】单链表反转
  9. LeetCode 1690. 石子游戏 VII(博弈DP)
  10. Matlab与C/C++混合编程 Matlab调用C函数
  11. 计算机专业方面的期刊介绍
  12. ATTCK实战系列二(CS域渗透)
  13. WindowsXP自带小工具(转)
  14. 2021年7月最新iOS面试题总结(答案篇)
  15. calamari项目结构解析
  16. WordPress 文章点赞
  17. 2021高考萧山二中成绩查询,2021年杭州高考各高中成绩及本科升学率数据排名及分析...
  18. 全国计算机一级考试介绍难不难,计算机一级难不难?有什么考试技巧?
  19. JDK.8源码阅读项目搭建之记录
  20. Samsung手机常用工程命令

热门文章

  1. 2017年“嘉杰信息杯” 中国大学生程序设计竞赛全国邀请赛:E—Partial Sum
  2. 读书笔记--模板(3)
  3. django之商品最近浏览记录实现
  4. 如何将自己开源的项目发布到maven中央仓库
  5. 0基础该如何快速入门python?全写在这篇学习攻略里了
  6. wget 下载云盘数据
  7. 店宝宝:电商的下一个十年,是什么局面
  8. ashx 接口调用_51.Qt-使用ajax获取ashx接口的post数据
  9. skew width_css3skew
  10. FSMN及其变种cFSMN DFSMN pyramidal-FSMN