一、模式介绍

策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。

策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。

策略模式是一种对象行为型模式。

二、模式结构

三、模式代码

1、抽象策略接口

package com.example.demo.strategy;
//策略接口
public interface Strategy {public String doScheme(String name,String scheme);
}

2、具体策略美人计

package com.example.demo.strategy;//美人计
public class Beauty implements Strategy{@Overridepublic String doScheme(String name,String scheme) {String all = scheme+"    "+"eg:"+name;return "美人计:" + all;}
}

3、具体策略苦肉计

package com.example.demo.strategy;//苦肉计
public class BitterMeat implements Strategy{@Overridepublic String doScheme(String name,String scheme) {String all = scheme+"    "+"eg:"+name;return "苦肉计:" + all;}
}

4、具体策略空城计

package com.example.demo.strategy;//空城计
public class EmptyCity implements Strategy{public String doScheme(String name,String scheme) {String all = scheme+"    "+"eg:"+name;return "空城计:" + all;}
}

5、创建上下文

package com.example.demo.strategy;//上下文
public class Context {private Strategy strategy;public Context(Strategy strategy){this.strategy = strategy;}public String executeStrategy(String name,String scheme){return strategy.doScheme(name, scheme);}
}

6、 模拟调用各策略

package com.example.demo.strategy;//调用策略
public class Main {public static void main(String[] args) {Context context = new Context(new EmptyCity());System.out.println(context.executeStrategy("诸葛亮","虚而示虚的疑兵之计,是一种疑中生疑的心理战,多用于己弱而敌强的情况。"));context = new Context(new BitterMeat());System.out.println(context.executeStrategy("三十六计","自己伤害自己,以蒙骗他人,从而达到预先设计好的目标。"));context = new Context(new Beauty());System.out.println(context.executeStrategy("王允,貂蝉之义父","它是利用色情、出卖肉体的方法,以女性勾引男性对象,以男性勾引女性对象,进行间谍情报活动。"));}
}

7、打印结果

四、使用情景

完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。

1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。
    2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
    3、登录认证,现在需要登录linux、Windows、mac、认证数据库。每种认证方式可以封装一个策略。

五、优缺点

优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、客户端必须知道所有策略类,并自行决定使用哪一种策略类。2、如果算法较多,则会造成很多的策略类。

六、demo地址

https://github.com/tongyuxin1/designModel/tree/master/src/main/java/com/example/demo

一起学设计模式-策略模式相关推荐

  1. 看漫画学设计模式——策略模式

    小明和小红是同一家公司的程序员,有一次,公司打算开发一个鸭子的游戏,要求该鸭子要具有会叫声.会游泳.不同的外观的功能,并且对于后期是否添加其他功能待定. 这个任务被项目主管安排给了小明,小明苦思冥想后 ...

  2. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  3. Python设计模式-策略模式

    Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...

  4. [设计模式] ------ 策略模式

    策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...

  5. java 策略模式 促销_java设计模式——策略模式

    一. 定义与类型 定义:针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换.策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能.当代码中 ...

  6. Springboot 使用设计模式- 策略模式

    前言 直白点,什么场景我们需要使用到设计模式- 策略模式. 在平常的springboot项目里面做CRUD,我们的习惯性基本是 一个mapper,一个service,一个serviceImpl. 但是 ...

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

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

  8. 15. 星际争霸之php设计模式--策略模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  9. Java设计模式-策略模式作业

    Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...

最新文章

  1. 专访博世王红星:大数据和AI将是中国制造业升级新动力
  2. Swift3.0语言教程字符串与文件的数据转换
  3. 设置cookie存活时间_Django之cookie、session、token
  4. 1066 Root of AVL Tree (25 分)【难 / 知识点: 平衡树 未完成】
  5. [SCM]源码管理 - perforce的集中授权+分布式团队+负载均衡+可扩展性+高可用性+灾难恢复...
  6. Python 安装第三方库,模块和包的安装方法
  7. Asp.net网站开发架构设计要求
  8. 【BZOJ1015】【tyvj3487】星球大战starwar,特别的并查集技巧
  9. python list 元素位置_Python将list中某个元素移至末尾
  10. phpPgAdmin-5.1安装配置
  11. 【转】PLI是什么以及怎么用
  12. nmap扫描端口 python
  13. 用python编写鸡兔同笼问题
  14. 数据分析复盘报告,用Excel轻松搞掂!
  15. 图像识别---Windows下anaconda和yolov5安装配置及简单使用
  16. C++PrimePlus第5章编程练习答案及运行结果
  17. C/C++ %s %d %u 基本概念与用法
  18. 读书笔记: 博弈论导论 - 16 - 不完整信息的动态博弈 信号传递博弈
  19. ARM SIMD NEON 简介 (翻译自 Introducing NEON Development Article)
  20. 六十二、Qt+Sqlserver 操作数类型冲突: varbinary 与 float 不兼容

热门文章

  1. WeekDay TO DateTime
  2. 12月13日主题讨论日
  3. Python学习笔记:web开发3
  4. 系统安装操作优化:chapter 3 安装windos操作系统。
  5. 分享 C++命名空间的解释
  6. 使用word完成毕业论文的所有详细步骤
  7. 【Python】if __name__ == ‘__main__‘:的作用和原理
  8. [云炬ThinkPython阅读笔记]2.1 赋值语句
  9. [MATLAB粒子模拟]Energy Vx(X) Vy(X) Vz(X)
  10. [我的1024开源程序]30元写的广义误差分布函数