一、设计图

二、Demo代码

1. Strategy接口

package com.mc.core;/*** Created by LCF on 2016/1/25.* 功能:核心策略的具体实现类。* 说明:Java中类不加任何修饰符是默认状态,此情况只允许在同一个包访问,之所以这么设计是为了减少暴露不必要变量的风险。* 观点:个人认为对于类或者方法:能不暴露更多的就不暴露更多的。*/
interface Strategy {/*** 包含核心策略的公共接口* @param a* @param b* @return*/int operate(int a, int b);
}

说明:此接口包含抽象出来的核心的策略。

2. AddStrategy和SubStrategy

package com.mc.core;/*** Created by LCF on 2016/1/25.* 功能:加法策略的具体实现类。* 说明:Java中类不加任何修饰符是默认状态,此情况只允许在同一个包访问,之所以这么设计是为了减少暴露不必要变量的风险。* 观点:个人认为对于类或者方法:能不暴露更多的就不暴露更多的。*/
class AddStrategy implements Strategy {@Overridepublic int operate(int a, int b) {return a+b;}
}

package com.mc.core;/*** Created by LCF on 2016/1/25.* 功能:减法策略的具体实现类。* 说明:Java中类不加任何修饰符是默认状态,此情况只允许在同一个包访问,之所以这么设计是为了减少暴露不必要变量的风险。* 观点:个人认为对于类或者方法:能不暴露更多的就不暴露更多的。*/
class SubStrategy implements Strategy {@Overridepublic int operate(int a, int b) {return a - b;}
}

说明:上述2个类,都是核心策略接口的具体实现类。

3. Context类

package com.mc.core;/*** Created by LCF on 2016/1/25.* 上下文对象实现类,有承上启下的作用。*/
public class Context {/*** 限制用户调用无参构造方法*/private Context(){}/*** 策略的公共接口类*/private Strategy strategy;/*** 枚举类型限制选择。*/public enum Choice{ADD,SUB}/*** 构造方法为确定使用哪种策略* @param choice 具体策略的映射*/public Context(Choice choice){if ("ADD".equals(choice.toString())) {strategy=new AddStrategy();}else{strategy=new SubStrategy();}}/*** 本质为调用公共接口类的方法。* @param a 运算所需第一个参数* @param b 运算所需第二个参数* @return*/public int operate(int a,int b){return strategy.operate(a,b);}
}

说明:此为承上启下的上下文对象类,1. 此类中要由构造函数确定具体调用那种实现类,2. 还要传入实现策略的具体数据。

项目开源在:http://git.oschina.net/codingox/DesignPattern-Strategy

转载于:https://www.cnblogs.com/LiuChunfu/p/5157336.html

设计模式之我见系列——策略模式相关推荐

  1. 设计模式 by Python1:策略模式

    设计模式 by Python1:策略模式 最近开始重新看<Head First 设计模式>,作为一个不错的练习,打算在整理设计模式笔记的时候用Python实现. 作为第一个介绍的设计模式, ...

  2. 老王讲设计模式(一)——策略模式

    策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 老王最近接到一个工作,上 ...

  3. 设计模式(三)策略模式——在Spring中使用策略模式

    前言 在 设计模式(一)策略模式 -- 策略模式结构 和 设计模式(二)策略模式 -- 在程序中通过枚举使用策略模式 两篇博文中分析了策略模式的基础使用,在实际的项目开发中要结合spring容器使用策 ...

  4. C++设计模式学习笔记:策略模式

    C++设计模式学习笔记:策略模式 策略模式设计商场促销 1.策略模式介绍 2.商场收银系统策略模式实现 3.策略模式与工厂模式结合 3.策略模式与工厂模式对比 策略模式设计商场促销 1.策略模式介绍 ...

  5. 设计模式解读之一: 策略模式——鸭子游戏

    设计模式解读之一: 策略模式--鸭子游戏 当我们掌握了Java的语法,当我们了解了面向对象的封装.继承.多态等特性,当我们可以用Swing.Servlet.JSP技术构建桌面以及Web应用,不意味着我 ...

  6. 策略模式和工厂模式的区别_设计模式系列 — 策略模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(si ...

  7. 设计模式之Strategy(策略模式系列1)

    看了Jdon上写的的策略模式,例子很简单,代码有些错误.http://www.jdon.com/designpatterns/ 文章写的比较早,其实现在的策略模式大多是用Enum来实现,会简单的多,但 ...

  8. 设计模式(二)--策略模式

    1.策略模式 在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一 ...

  9. lt;二gt;读lt;lt;大话设计模式gt;gt;之策略模式

    又和大家见面了.可以坚持写出第二篇文章真不错,好好加油. <<大话设计模式>>解说策略模式是以商场收银软件程序开头的,那么问题来了.哪家商场收银软件强,开玩笑了. 读过上篇文章 ...

最新文章

  1. H5面试题---介绍js的基本数据类型
  2. PowerShell 导入 SQL Server 的 PS 模块
  3. Android Gradle 自定义Task详解二:进阶
  4. 二叉树和为某种所有路径
  5. java中乐观锁_Java中乐观锁与悲观锁的实现
  6. 在桌面应用中使用JAVA DB[组图]
  7. 【IDEA】IDEA 下 maven 一个诡异问题,一个正常项目 过了一夜 依赖很多 飘红
  8. linux转为root用户_[R] 展示linux文件树 - collapsibleTree
  9. USB Mass Storage
  10. FWT快速沃尔什变换
  11. 区块链 以太坊 智能合约 如何销毁 废弃 selfdestruct
  12. 防盗链及图片加密系统
  13. springboot实现第三方qq登入
  14. 推特员工大规模辞职,马斯克被“问候”;腾讯10多万员工平均月薪超8万;雪欲“白嫖”网易百万玩家数据...
  15. 计算机 英语简历,2017计算机英文简历范文
  16. 计算机应用专业招聘试讲内容,广东文艺职业学院2018年第二批合同制人员招聘专业技能考核和试讲题目...
  17. 项目开发——课程表查询APP
  18. 发布上线前,先小秀一把俺的64位浏览器,速度那觉对是杠杠滴,上youtube,上google不费劲
  19. 水星usb无线网卡MW150US驱动 for Mac
  20. [TYVJ 1927] 『Citric II』一道防AK好题 · 模拟

热门文章

  1. 多数据源处理-苞米豆-dynamic
  2. python定义字典列表_Python基础语法(四)—列表、元组、字典、集合、字符串
  3. 我的世界服务器虚拟菜单插件,[综合|娱乐|管理][比赛]VirtualMenu——支持多种类型GUI的虚拟菜单[1.7.10~1.14]...
  4. python mysql 时间比较大小_python时间函数与mysql时间函数转换
  5. conda指定路径_导出不带前缀变量的conda环境,该变量显示executab的本地路径
  6. MyBatis 为什么需要通用 Mapper ? 1
  7. 数据倾斜原理及解决方案
  8. oracle与mysql的区别总结(一)
  9. Oracle存储过程及调用
  10. 手把手教你Axure-基本工具栏