一.概念
策略模式:它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。
二.UML
- Context(应用场景),持有Strategry对象的引用。
- Context能动态指定Strategry具体的实现。
- Context要使用Strategry提供的算法。
- Strategry(抽象策略类),定义了算法的骨架。
- ConcreteStrategryA-C实现类,提供算法的具体实现。
三.实例分析
铁道部现需要一个订票网站,于是对外招标,有许多公司都参与了竞标,它们都有能力做出一个像样的网站出来。因为铁道部有钱撒,所以打算搞两三个系统出来,对外开放一个给大家订票,另外两个保留,一旦发现第一个系统不对劲,立马使用第二个系统。从这个里面,我们可以抽象出这样的几个类:
ProjectPublisher:项目发布者,铁道部。
ProjectTeamA-C:各个竞标公司。
ProjectPublisher:
- package com.zzy.strategry;
- /**
- * 项目发布者-铁道部
- * @author eason
- */
- public class ProjectPublisher {
- //持有ProjectTeam对象的引用
- private ProjectTeam projectTeam;
- public ProjectPublisher(ProjectTeam projectTeam) {
- this.projectTeam = projectTeam;
- }
- //使用ProjectTeam提供的算法
- public void publishProject() {
- projectTeam.finshProject();
- }
- //能动态指定ProjectTeam具体的实现
- public void setProjectTeam(ProjectTeam projectTeam) {
- this.projectTeam = projectTeam;
- }
- }
ProjectTeam
- package com.zzy.strategry;
- /**
- * 抽象策略类
- * @author eason
- */
- public abstract class ProjectTeam {
- //定义了算法的骨架
- public abstract void finshProject();
- }
ProjectTeamA
- package com.zzy.strategry;
- /**
- * 策略实现类-每个竞标公司
- * @author eason
- */
- public class ProjectTeamA extends ProjectTeam {
- //提供算法的具体实现
- public void finshProject() {
- //TODO
- System.out.println("ProjectTeamA完成这个网站");
- }
- }
TestStrategry
- package com.zzy.strategry;
- /**
- * 测试类-client
- * @author eason
- */
- public class TestStrategry {
- public static void main(String[] args) {
- ProjectTeamA pa = new ProjectTeamA();
- ProjectTeamB pb = new ProjectTeamB();
- //首先ATeam的系统
- ProjectPublisher pub = new ProjectPublisher(pa);
- pub.publishProject();
- //媒体报道现在使用的订票网站,经常瘫痪
- //于是乎换了一个系统
- pub.setProjectTeam(pb);
- pub.publishProject();
- }
- }
四.使用场景
- 一件事情,有很多方案可以实现。
- 我可以在任何时候,决定采用哪一种实现。
- 未来可能增加更多的方案。
- 策略模式让方案的变化不会影响到使用方案的客户。
- 在铁道部的例子中,我强调的“网站瘫痪”是为了来说明上面的第2点。实际上,对购票者来说,使用哪个系统都能够到票,这个“够到票”就叫没有影响到使用方案的用户。
五.使用感受
- 方便client使用,用户只需要拿到Context就能完成所有事情。
- OO原则中的组合优于继承。
- OO原则中的封装性。
其他的优缺点,网上有,但我并不能完全理解,就不写了。
相关推荐
v1.1.1 是一个商业级别的音乐播放应用的源码版本,它提供了丰富的音乐播放功能,并且可能包含了一些针对商业环境优化的设计。这个源码是开发者学习和理解音乐应用开发的宝贵资源,特别是对于那些对Android或iOS平台...
- **维度建模**:一种将数据组织成维度和事实的方式,便于快速查询和分析。 #### 五、构建数据仓库:抽取数据简介 - **数据抽取**:从源系统中提取数据的过程。 - **清洗与转换**:清理数据并将其转换为适合加载到...
【ZY08-C遥控器控制小车程序代码】是一个针对特定型号的小车——ZY08-C,设计的控制系统。这个程序的核心目标是接收来自遥控器的指令,解析这些指令,并根据指令来驱动小车进行相应的动作,如前进、后退、左转、右转...
- 满减策略的应用场景与设计 **知识点二:优惠券定价策略** - **题目概述**:假设新开一家电商店铺B,同样售卖与A店相同的耳机和音箱,标价相同。B店计划提供满99减x的优惠券,其中x为大于0且小于99的整数。问题...
根据提供的信息,我们可以总结并详细解释以下几个核心知识点: ### C++五子棋程序设计源代码解析 #### 1....- **图形库的使用**:程序使用了`graphics.h...对于初学者来说,这是一个很好的学习C++语法和编程逻辑的例子。
- **下行资源分配类型**:定义了不同类型的资源分配策略。 - **VRB到PRB的映射**:将虚拟资源块映射到物理资源块的过程。 - **如何确定调制阶数和TB size**:根据信道质量信息(CQI)来决定使用哪种调制方式和传输块...
《RF-YX-ZY-01-F03 住宅市场调查问卷》是一个关于住宅市场的调研文档,主要关注的是中国房地产市场的消费者需求、购房行为以及对住宅品质和价格的认知。通过对这个压缩包中的“RF-YX-ZY-01-F03 住宅市场调查问卷.doc...
ZY-03 设计合同管理作业指引》(以下简称《指引》)是一份针对设计行业合同管理流程的详细操作手册,它不仅提供了一系列操作步骤,而且对行业特点与法律风险进行了深入分析,从而帮助设计企业与从业人员构建起更为...
设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的经验总结。在Java编程中,设计模式的应用能够使代码更具可读性、可维护性和可扩展性。本资源"设计模式详解-JAVA语言实现"深入浅出地探讨了如何...
4. **报告结构**:一个完整的分析报告通常包括以下几个部分:介绍(背景与目的)、方法(调查设计与实施)、结果(数据展示与分析)、讨论(发现与解读)、结论(主要发现与建议)以及附录(原始数据或详细计算)。...
3. 文档处理:《RF-YX-ZY-01-F03 住宅市场调查问卷(1).doc》表明文档使用了Microsoft Word格式,这是最常用的文本处理软件之一。在IT领域,熟练掌握文档处理软件是基础技能,包括创建、编辑、格式化文本、图表,以及...
《RF-YX-ZY-06-F06 客户入场统计表》是一个与客户管理相关的数据文件,其核心内容是收集和分析客户入场的相关数据。这个文件采用的是Excel(.xls)格式,这是一种广泛应用于数据处理、数据分析和报告生成的电子表格...
目标成本管理是企业财务管理中的一个重要概念,尤其在IT行业中,对于项目预算控制和...通过对"RF-CB-ZY-01 目标成本管理作业指引(1).doc"的学习和实践,企业可以更好地理解和运用这一管理工具,实现成本效益的最大化。
《HeadFirst设计模式》是一本深受开发者喜爱的设计模式入门书籍,以其独特的教学方式,通过丰富的图解和幽默的语言,使得复杂的设计模式概念变得易于理解。这本书涵盖了23种经典的GoF设计模式,以及一些现代软件开发...
2. **规范与标准**:精装工程通常遵循一系列的建筑规范和行业标准,这与IT领域的编程规范、设计模式、安全标准等有相似之处。遵守标准能确保项目的稳定性和可维护性。 3. **流程细化**:分项工程意味着将大项目分解...
- 微机接口技术是计算机科学中的一个重要分支,它涉及如何设计和实现微处理器与外部设备之间的通信机制。 - 本书旨在介绍微机接口技术的基本原理和实践方法,帮助读者掌握微机系统的设计与应用。 2. **系统主要...
《RF-KF-ZY-04-F03 客户满意度调查分析报告(提纲)》是一个关于评估和提升客户满意度的重要文档。这份报告通常包括了对客户满意度调查的全面规划,旨在帮助企业深入了解客户的需求、期望以及他们对产品或服务的体验...
7. **合作意愿与条件**:分析供方的合作态度、合作期限、合作模式(独家代理、区域代理等)以及价格策略等,以确保双方的利益一致。 8. **风险评估**:识别可能的法律风险、商业风险,比如诉讼历史、信用记录,以...
"RF-GC-ZY-08-F02 甲供及三方供货材料进场计划(1)"是一个关于建筑材料管理的文档,主要涉及甲供材料(即由甲方提供的材料)以及第三方供货材料的进场计划。此文档的重要性在于确保工程项目的顺利进行,避免因材料...
总的来说,RF-KF-ZY-04 客户满意度调查作业指引是一份综合性的指导文档,它为企业提供了一套标准化的流程,从设计调查到实施,再到分析结果和采取行动,以期最大化地利用客户反馈,驱动企业的持续改进和发展。...