策略模式的理解与应用
策略模式的理解
- 策略模式
- 什么是策略模式
- 策略模式的重点理解
- 简单代码示例
- 策略模式图解
- 策略模式的优势
- 策略模式的使用场景
- 总结
策略模式
什么是策略模式
策略模式(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 来选择行为时。
总结
策略模式主要用来分离算法,在相同的行为抽象下有不同的具体实现策略。
策略模式的本质是:分离算法,选择实现
策略模式的理解与应用相关推荐
- 我对模板模式和策略模式的理解
模板:每个人基本上都是幼儿园小学中学大学等 策略:从上海到武汉我可以坐飞机,可以坐火车,可以开车.可以火车+飞机.可以开车加骑车. 转载于:https://www.cnblogs.com/woaini ...
- php 策略模式实现原理,php 策略模式原理与应用深入理解
php 策略模式原理与应用深入理解,策略,可以用,接口,简单,算法 php 策略模式原理与应用深入理解 易采站长站,站长之家为您整理了php 策略模式原理与应用深入理解的相关内容. 本文实例讲述了ph ...
- php 策略模式 理解
策略模式 简单理解就是 有n个做法供你选择,根据你的需要选择某个策略得到结果 就应用场景来说: 例1:比如购买商品需要支付,你可以提供 微信支付.支付宝支付.支付通支付....(不同的支付方式就是不同 ...
- 策略模式(Header-First笔记)
个人网站www.itiask.com 专业问答网站,基于我记录框架开发 策略模式和设计原则(主要是自己的笔记:水平较低,请勿语言攻击) 如果想理解的深入建议深入的读读headfirst,这个真有用, ...
- Android使用的设计模式2——策略模式
今天讲解一下策略模式,策略模式也是很常用的设计模式,对多种算法或者数据结构选择使用的情况下,经常会使用策略模式来管理这些算法.下面会简单讲解一下策略模式的概念和基本实现.然后结合Android里面的实 ...
- 还在使用if else写代码?试试 “策略模式” 吧!
我们使用的app大多都有分享的功能,我们可以选择分享到不同的地方,比如微博.微信.QQ等等,虽然是同一个内容,但是分享到不同的平台就会有不同的处理方式,比如要跳转到不同的app或者直接复制链接等等.如 ...
- 还在用 if else?试试策略模式吧!
作者 | LA 来源 | 程序员小灰(ID:chengxuyuanxiaohui) 我们使用的App大多都有分享的功能,我们可以选择分享到不同的地方,比如微博.微信.QQ等等,虽然是同一个内容,但是分 ...
- 设计模式学习之策略模式(Strategy,行为型模式)(13)
转载地址:http://www.cnblogs.com/zhili/p/StragetyPattern.html 一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方 ...
- 设计模式-优惠券-策略模式
策略模式定义与实现 策略模式的定义 首先我们可以先看一下策略模式的定义: Define a family of algorithms,encapsulate each one,and make t ...
最新文章
- Python实现前端AES加密方式分析,***密码学必备!
- jquery给元素添加样式表的方法
- Visual Studio代码中的多个游标[关闭]
- Win2008 r2 iis7/iis7.5系统下HTTP重定向(301重定向)图文方法
- AgileEAS.NET平台视频会议培训第二辑-简单插件开发应用演练(速度下载)
- Python之Idel利器jupyter notebook
- 具有Spring的简单工作流引擎
- 【算法系列之三】单链表反转
- LeetCode 1690. 石子游戏 VII(博弈DP)
- Matlab与C/C++混合编程 Matlab调用C函数
- 计算机专业方面的期刊介绍
- ATTCK实战系列二(CS域渗透)
- WindowsXP自带小工具(转)
- 2021年7月最新iOS面试题总结(答案篇)
- calamari项目结构解析
- WordPress 文章点赞
- 2021高考萧山二中成绩查询,2021年杭州高考各高中成绩及本科升学率数据排名及分析...
- 全国计算机一级考试介绍难不难,计算机一级难不难?有什么考试技巧?
- JDK.8源码阅读项目搭建之记录
- Samsung手机常用工程命令
热门文章
- 2017年“嘉杰信息杯” 中国大学生程序设计竞赛全国邀请赛:E—Partial Sum
- 读书笔记--模板(3)
- django之商品最近浏览记录实现
- 如何将自己开源的项目发布到maven中央仓库
- 0基础该如何快速入门python?全写在这篇学习攻略里了
- wget 下载云盘数据
- 店宝宝:电商的下一个十年,是什么局面
- ashx 接口调用_51.Qt-使用ajax获取ashx接口的post数据
- skew width_css3skew
- FSMN及其变种cFSMN DFSMN pyramidal-FSMN