学设计模式一段时间了,有些懂了,有些半知半解,通过写笔记博客的方式总结一下:

关于策略模式,我的个人理解就是将一些经常变动的算法独立抽取出来,可以是一个方法,也可以是一个策略类,这样,如果有需求变更,只需要添加新的策略类然后进行调用切换即可。

虽然个人使用时一般是抽取为方法,但是以面向对象的角度以及书上的类图来看,采用策略类比较符合面向对象的思想。当然也不必墨守成规,灵活健壮清晰可读即可,不必过度去设计。


策略模式

1、场景:

用于经常变动的业务场景或算法。

2、类图:

整个策略的消费者,对应类图中的Context:

package com.pat.stratage;
/*** 策略消费者* @author Administrator**/
public class Context {//策略对象private Stratage stratage;public void calculate() {//调用策略类中的具体策略stratage.algo();}//构造方法public Context() {}public Context(Stratage stratage) {this.stratage=stratage;}}

策略的接口类:

package com.pat.stratage;
/*** 具体策略接口* @author Administrator**/
public interface Stratage {public void algo();
}

具体策略1

package com.pat.stratage;
/*** 策略实现类1* @author Administrator**/
public class StratageA implements Stratage{@Overridepublic void algo() {System.out.println("执行策略A");}}

具体策略2

package com.pat.stratage;public class StratageB implements Stratage{@Overridepublic void algo() {System.out.println("执行策略B");}}

具体策略3

package com.pat.stratage;public class StratageC implements Stratage{@Overridepublic void algo() {System.out.println("执行策略C");}}

测试:

package com.pat.stratage;public class TestStratage {public static void main(String[] args) {//生产策略A对象Stratage str = new StratageA();//构造消费者对象Context con = new Context(str);//调用方法con.calculate();//生产策略B对象Stratage str2 = new StratageB();//构造消费者对象Context con2 = new Context(str2);//调用方法con2.calculate();}
}控制台打印结果:
执行策略A
执行策略B

3、拓展提升:

上面只是策略模式的基本用法,还可以横向扩展或与其它设计模式结合,从而更灵活的运用。

例如,每个策略都需要传入参数返回计算完成的结果等等,这里不多解释了,记住核心,随机应变即可。

【设计模式】行为型01策略模式(strategy patten)相关推荐

  1. Headfirst设计模式的C++实现——策略模式(Strategy)

    前言 最近在学习<Headfirst设计模式>,里面的例子都是Java的.但是我对Java并不熟悉,所以试着用C++来实现书中的例子. 先来看看Duck以及子类 Duck.h 1 #inc ...

  2. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  3. Java设计模式之行为型:策略模式

    一.背景: 在开发中经常遇到这种情况,实现某个功能有多种算法策略,我们可以根据不同环境或者条件选择不同的算法策略来完成该功能,比如查找.排序等,一种常用方式是硬编码在一个类中,如需要提供多种查找算法, ...

  4. 李建忠设计模式——策略模式Strategy

    目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...

  5. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

  6. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  7. 设计模式--策略模式(strategy)

    1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...

  8. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了"工厂模式"."策略模式" ...

  9. JavaScript 设计模式核⼼原理与应⽤实践 之 行为型:策略模式——重构小能手,拆分“胖逻辑”

    JavaScript 设计模式核⼼原理与应⽤实践 之 行为型:策略模式--重构小能手,拆分"胖逻辑" 行为型:策略模式--重构小能手,拆分"胖逻辑" 策略模式和 ...

最新文章

  1. SQL中的SqlConnection连接方式
  2. Chrome 开发工具之Network
  3. Spring AOP 源码系列(一)解析 AOP 配置信息
  4. C++自定义函数实现灰度图转化
  5. eslint php,ESlint操作步骤详解
  6. 焊接空间臂_焊接烟尘净化器设备哪种好
  7. Dart基础学习02--变量及内置类型
  8. 北大博士拟入职华政被网友抵制,她为何自愿放弃?
  9. angular 点菜_JavaScript实现的select点菜功能示例
  10. iOS 取消多余tableView的横线的写法
  11. linux轻量级的图形库,基于Microwindows的嵌入式Linux轻量级图形应用库的设计
  12. WAV声音档转PCM
  13. 屏幕录像专家2018注册机怎么用?
  14. 【rmzt:suika动漫美女可爱主题】
  15. java实现生命游戏
  16. S32K144之芯片锁死解锁——关闭debug端口
  17. VP9编码器客观及主观质量优化
  18. 实现网页中的文字不允许被复制
  19. java进程线程_Java进程线程笔记
  20. 单位篮球比赛结束,感想很多

热门文章

  1. 常见的百度搜索指令:site,domain,intitle,inurl
  2. 输入一个班级全体学生的成绩,输出不及格的学生成绩和及格学生的平均成绩
  3. wp主题php修改,修改WordPress主题
  4. 亚马逊店铺如何计算?
  5. dlf packet_DLF的完整形式是什么?
  6. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java图书馆自习室占座选座zg09h
  7. 超级计算机是几近制,进制
  8. 中国海洋大学-信息系统开发(Java)复习
  9. RFID智能仓储系统方案
  10. Charles V4系列更新 | 绿色特别版 | 视频教程