在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
介绍
意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
个人感觉:这个并没有减少ifesle不过是将子方法的ifelse挪到调用他的父方法,通过想context传入不同Strategy实现不同代码逻辑。

将不同的分支判断逻辑(ifelse)里面的流程差异封装到strategy中,context中传入不同stratgy执行不同strategy`子类逻辑。
本质上并没有减少判断逻辑,不过可以同其他方式进一步优化去掉形式上的if-else,比如不同 条件 和 需要执行strategy之间购买map,这样可以通过map实现类似if-else的分支判断逻辑,消除了形式上的if-else。
这个和模板也非常类似,不过模板的执行流是固定的,具体执行细节是子类重写,但策略的执行流也是不同的,通过strategy的不同实现来体现。

代码

public class Context {private Strategy strategy;public Context(Strategy strategy){this.strategy = strategy;}public int executeStrategy(int num1, int num2){return strategy.doOperation(num1, num2);}
}public static void main(String[] args) {Context context = new Context(new OperationAdd());    System.out.println("10 + 5 = " + context.executeStrategy(10, 5));context = new Context(new OperationSubstract());      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));context = new Context(new OperationMultiply());    System.out.println("10 * 5 = " + context.executeStrategy(10, 5));}

设计模式16_策略模式相关推荐

  1. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  2. 换个姿势学设计模式:策略模式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:公众号「闻人的技术博客」 前言 前段时间,接到一个 ...

  3. 研磨设计模式之 策略模式--转

    http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式   2010-09-09 作者:云飞龙行 来源:云飞龙行的blog   先感谢众多朋友的支持 ...

  4. 设计模式:策略模式(Strategy)

    定   义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...

  5. C++设计模式之策略模式(Strategy)

    Strategy策略模式 作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML图: 代码实现 #include <iostream& ...

  6. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  7. 一篇博客读懂设计模式之-----策略模式

    设计模式之策略模式 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的对象 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决:在有多种算法相似的情况下 ...

  8. 面向对象设计模式之策略模式

    面向对象设计模式之策略模式 1.策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 2.抽象鸭子类,鸭子飞行行为在此处类似于算法族 1 package ...

  9. java策略模式详解_Java经典设计模式之策略模式原理与用法详解

    本文实例讲述了Java经典设计模式之策略模式.分享给大家供大家参考,具体如下: 策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式 ...

最新文章

  1. 【CV】Numpy|Python中矩阵和数组乘法及向量相关问题
  2. 学习在Unity中创建一个动作RPG游戏
  3. 入门 | CNN也能用于NLP任务,一文简述文本分类任务的7个模型
  4. 开源(Open Source)那些事儿 (一)
  5. 用lemon测交互题
  6. win10pin不可用进不去系统_解决win7系统下连接网络打印机不可用的处理方法
  7. SAP UI5 CRM Reuse Fiori应用 note.js代码审查结果
  8. php调用数据库中的图片地址显示不出来,图片显示不出来,但是数据库里有显示...
  9. android焦点动画,Android编程中PopupWindow的用法分析【位置、动画、焦点】
  10. java imagemagick 灰度,如何在imagemagick中转换灰度bmp
  11. ASP.NET MVC:UrlHelper.cs
  12. GPS经纬度坐标和UTM坐标的相互转换
  13. JS中改变this指向的两种方法
  14. python桌面爬虫_爬虫项目实战十三:爬取zol桌面壁纸
  15. 常见工业相机及接口综述
  16. JAVA父类引用指向子类的对象是什么意思?有什么作用?
  17. 由lol六周年全新官网按钮动画——动画效果、z-index
  18. 取代房子,这是未来5年最好的投资!
  19. 天猫用户重复购买预测——数据探索
  20. web前端面试-10大经典题(HTML基础)

热门文章

  1. 【Java开发规范】Float,Double,BigDecimal 精度使用注意事项
  2. 如何使用PowerShell创建简单SQL Server数据库登录对话框
  3. Flask详解(上篇)
  4. CentOS6.5下安装mongodb
  5. JavaScript基础学习(一)—JavaScript简介
  6. Block实现iOS回调
  7. 王立平--android事件监听的3种方式
  8. java类和对象的基础(笔记)
  9. 用Eclipse 统计代码行数小技巧
  10. cocos js响应过程