创建一个能够根据所传递的参数对象的不同而具有不同行为的方法

  • 要执行的算法固定不变,封装到一个类(Context)中
  • 策略就是传递进去的参数对象,它包含执行代码

  • 策略接口

/*** 策略接口*/
public interface IStrategy {String name();/*** 具体逻辑(算法)* @param str* @return*/String Arithmetic(String str);
}
  • 具体实现
public class Downcase implements IStrategy {public String name() {return getClass().getSimpleName();}public String Arithmetic(String str) {return str.toLowerCase();}
}public class UpCase implements IStrategy {public String name() {return getClass().getSimpleName();}public String Arithmetic(String str) {return str.toUpperCase();}
}public class Splitter implements IStrategy {public String name() {return getClass().getSimpleName();}public String Arithmetic(String str) {return Arrays.toString(str.split(" "));}
}
  • 封装逻辑(算法)
/*** 策略模式通过组合的方式实现具体算法* 其要执行的算法不变,封装到一个类(Context)中*/
public class Context {private IStrategy mStrategy;/*** 将抽象接口的实现传递给组合对象* @param strategy*/public Context(IStrategy strategy){this.mStrategy = strategy;}/*** 封装逻辑(算法)* @param s*/public void doAction(String s){System.out.println(mStrategy.name());System.out.println(this.mStrategy.Arithmetic(s));}
}
  • 测试
    public static String s="Disagreement with beliefs is by definition incorrect";public static void main(String[] args){IStrategy is = new UpCase();Context c = new Context(is);c.doAction(s);IStrategy isd = new Downcase();Context c2 = new Context(isd);c2.doAction(s);IStrategy iss = new Splitter();Context c3 = new Context(iss);c3.doAction(s);}

Java 策略模式(Strategy)相关推荐

  1. Java策略模式(Strategy)

    文章目录 策略模式(Strategy) 一.不使用策略模式 二.使用策略模式 1.案例类图 2.案例实现 3.总结 4.开发中的使用场景 策略模式(Strategy) 一.不使用策略模式 使用场景: ...

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

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

  3. Java两种设计模式_23种设计模式(11)java策略模式

    23种设计模式第四篇:java策略模式 定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这 ...

  4. 策略模式/Strategy

    策略模式/Strategy 意图/适用场景: 策略模式是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以互换.这样做的好处是,客户端可以以插件的方式更换算法. 电子商务网站的购 ...

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

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

  6. java策略模式(Java策略模式多种返回结果)

    Java设计模式的中介者模式是怎样的? 如果对象之间的关系原本一目了然,中介对象的加入便是"画蛇添足". 来看下中介者模式的组成部分吧. 1) 抽象中介者(Mediator)角色: ...

  7. java策略模式案例_java策略模式典型案例

    java策略模式典型案例 java策略模式典型案例 [var1] 参考代码 : https://github.com/zhang-xiaoxiang/DesignPatterns23 没有用策略模式我 ...

  8. java策略模式_Java设计模式之策略模式详解

    本文实例为大家分享了Java策略模式,供大家参考,具体内容如下 1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下: Def ...

  9. 8.6 GOF设计模式四: 策略模式… Strategy Pattern

    策略模式- Strategy Pattern  在POS系统中,有时需要实行价格优惠, 该如何处理?  对普通客户或新客户报全价  对老客户统一折扣5%  对大客户统一折扣10%  注:课件 ...

最新文章

  1. android 判断横竖屏的方法
  2. 【错误记录】Groovy 注入方法报错 ( Cannot add new method [hello] for arguments [[]]. It already exists )
  3. ubuntu 串口转usb使用
  4. 【Q】之防火墙的SNAT DANT原理应用
  5. Angular 下拉菜单实现的一个例子
  6. mysql error log清理_手动删除mysql日志/var/log/mysql/error.log导致的mysql无法启动
  7. 主动变被动9个例句_小管理,大智慧——激发团队变被动为主动的奥秘
  8. Vue 路由的模块化
  9. 解决MobaXterm左侧没有文件列表,没有SCP,不显示文件夹
  10. cad计算机编程,CAD/CAM自动编程的步骤
  11. 聚类的基本概念-聚类与分类的区别
  12. 2012年8月11日
  13. IE无法打开二级页面
  14. 笔记本加装固态和内存条教程(超详细)
  15. AMD EPYC(霄龙)Genoa服务器 | 综合评测
  16. 战地1 - 概念艺术
  17. java-easyExcel导出-合并单元格
  18. python手机壁纸超清_Python爬虫-王者荣耀高清壁纸下载
  19. 死亡搁浅运送系统服务器,死亡搁浅图文攻略 主线流程+订单系统+运送流程+建筑搭建 操作介绍-游侠网...
  20. 阿里巴巴反购雅虎胜算几何?

热门文章

  1. MySQL+Navicat安装配置教程(超级详细、保姆级)
  2. 量化进阶——理工科出身如何转做量化交易(一)
  3. PSP - CASP15 蛋白质结构域 Domain 的定义和分类
  4. 2021服务器品牌前十大排名
  5. OSAL移植到STM8
  6. c语言实验--正弦,C语言实验——正弦
  7. 手机无法连接电脑的手机助手
  8. 连接打印服务器显示无合适驱动,Silex DS-510打印服务器驱动(解决DS-510打印机连接问题)V7.2.1 最新版...
  9. [附源码]Python计算机毕业设计SSM基于的仓库管理系统(程序+LW)
  10. cocos creator开发的精灵大师小游戏源码分享,支持h5安卓微信小游戏等多平台