设计模式之我见系列——策略模式
一、设计图
二、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
设计模式之我见系列——策略模式相关推荐
- 设计模式 by Python1:策略模式
设计模式 by Python1:策略模式 最近开始重新看<Head First 设计模式>,作为一个不错的练习,打算在整理设计模式笔记的时候用Python实现. 作为第一个介绍的设计模式, ...
- 老王讲设计模式(一)——策略模式
策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 老王最近接到一个工作,上 ...
- 设计模式(三)策略模式——在Spring中使用策略模式
前言 在 设计模式(一)策略模式 -- 策略模式结构 和 设计模式(二)策略模式 -- 在程序中通过枚举使用策略模式 两篇博文中分析了策略模式的基础使用,在实际的项目开发中要结合spring容器使用策 ...
- C++设计模式学习笔记:策略模式
C++设计模式学习笔记:策略模式 策略模式设计商场促销 1.策略模式介绍 2.商场收银系统策略模式实现 3.策略模式与工厂模式结合 3.策略模式与工厂模式对比 策略模式设计商场促销 1.策略模式介绍 ...
- 设计模式解读之一: 策略模式——鸭子游戏
设计模式解读之一: 策略模式--鸭子游戏 当我们掌握了Java的语法,当我们了解了面向对象的封装.继承.多态等特性,当我们可以用Swing.Servlet.JSP技术构建桌面以及Web应用,不意味着我 ...
- 策略模式和工厂模式的区别_设计模式系列 — 策略模式
点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(si ...
- 设计模式之Strategy(策略模式系列1)
看了Jdon上写的的策略模式,例子很简单,代码有些错误.http://www.jdon.com/designpatterns/ 文章写的比较早,其实现在的策略模式大多是用Enum来实现,会简单的多,但 ...
- 设计模式(二)--策略模式
1.策略模式 在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一 ...
- lt;二gt;读lt;lt;大话设计模式gt;gt;之策略模式
又和大家见面了.可以坚持写出第二篇文章真不错,好好加油. <<大话设计模式>>解说策略模式是以商场收银软件程序开头的,那么问题来了.哪家商场收银软件强,开玩笑了. 读过上篇文章 ...
最新文章
- H5面试题---介绍js的基本数据类型
- PowerShell 导入 SQL Server 的 PS 模块
- Android Gradle 自定义Task详解二:进阶
- 二叉树和为某种所有路径
- java中乐观锁_Java中乐观锁与悲观锁的实现
- 在桌面应用中使用JAVA DB[组图]
- 【IDEA】IDEA 下 maven 一个诡异问题,一个正常项目 过了一夜 依赖很多 飘红
- linux转为root用户_[R] 展示linux文件树 - collapsibleTree
- USB Mass Storage
- FWT快速沃尔什变换
- 区块链 以太坊 智能合约 如何销毁 废弃 selfdestruct
- 防盗链及图片加密系统
- springboot实现第三方qq登入
- 推特员工大规模辞职,马斯克被“问候”;腾讯10多万员工平均月薪超8万;雪欲“白嫖”网易百万玩家数据...
- 计算机 英语简历,2017计算机英文简历范文
- 计算机应用专业招聘试讲内容,广东文艺职业学院2018年第二批合同制人员招聘专业技能考核和试讲题目...
- 项目开发——课程表查询APP
- 发布上线前,先小秀一把俺的64位浏览器,速度那觉对是杠杠滴,上youtube,上google不费劲
- 水星usb无线网卡MW150US驱动 for Mac
- [TYVJ 1927] 『Citric II』一道防AK好题 · 模拟
热门文章
- 多数据源处理-苞米豆-dynamic
- python定义字典列表_Python基础语法(四)—列表、元组、字典、集合、字符串
- 我的世界服务器虚拟菜单插件,[综合|娱乐|管理][比赛]VirtualMenu——支持多种类型GUI的虚拟菜单[1.7.10~1.14]...
- python mysql 时间比较大小_python时间函数与mysql时间函数转换
- conda指定路径_导出不带前缀变量的conda环境,该变量显示executab的本地路径
- MyBatis 为什么需要通用 Mapper ? 1
- 数据倾斜原理及解决方案
- oracle与mysql的区别总结(一)
- Oracle存储过程及调用
- 手把手教你Axure-基本工具栏