策略模式简介

策略模式:策略模式是一种行为型模式,它将对象和行为分开,将行为定义为 一个行为接口 和 具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个if判断都可以理解为就是一个策略。本模式使得算法可独立于使用它的用户而变化

优点:

提供了对“开放封闭原则”的完美支持

提供了管理相关的算法族的办法

提供了可以替换继承关系的办法

使用策略模式可以避免使用多重条件转移语句

demo:

public abstract class CashSuper {public abstract void AlgorithmInterface();
}
public class ConcreteCashSuperA extends CashSuper {@Overridepublic void AlgorithmInterface() {System.out.println("策略A");}
}
public class ConcreteCashSuperB extends CashSuper {@Overridepublic void AlgorithmInterface() {System.out.println("策略B");}
}
public class CashContext {CashSuper strategy;public CashContext(String strategy) {switch (strategy) {case "A":this.strategy = new ConcreteCashSuperA();break;case "B":this.strategy = new ConcreteCashSuperB();break;case "C":this.strategy = new ConcreteCashSuperC();break;default:break;}}public void ContextInterface() {strategy.AlgorithmInterface();}
}
import java.util.Scanner;public class Main {public static void main(String[] args) {while (true) {Scanner in = new Scanner(System.in);System.out.println("请在策略A B C 中选择对应的策略");String strategy = in.nextLine();CashContext cashContext = new CashContext(strategy);cashContext.ContextInterface();}}
}

demo是简单工厂模式与策略模式的结合, 与简单工厂模式相比,客户端不需要同时持有CashSuper和CashFactory,只需要持有CashContext,耦合度更低。

类图:

CashNormal,CashRebate,CashReturn继承自CashSuper,CashContext和CashSuper是聚合关系,一个CashContext中可能包含多个CashSuper

内容参考《大话设计模式》

设计模式学习:策略模式相关推荐

  1. swift设计模式学习 - 策略模式

    移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 策略模式 策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. ...

  2. 设计模式学习---策略模式

    最近在看"Head First 设计模式"这本书,便想将自己所学的记录下来以加深理解,文中肯定有许多不足之处,请各位前辈们指出. 什么是设计模式 设计模式并不是某种开发语言中的工具 ...

  3. 设计模式学习--策略模式

    前言 使用策略模式可以代替多重if-else和switch语句,让代码维护变得更加简单,乍一看跟工厂模式一模一样,下面是个简单的例子.策略模式包含以下三种角色: 环境(Context)角色:持有一个S ...

  4. JavaScript设计模式之策略模式(学习笔记)

    在网上搜索"为什么MVC不是一种设计模式呢?"其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composi ...

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

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

  6. 策略设计模式_设计模式之策略模式总结

    再上一篇文章<设计模式之策略模式>中,我们通过模拟鸭子项目,了解了什么是策略模式,怎么使用策略模式.本文将通过鸭子项目的学习,对策略模式进行总结. 策略模式: 分别封装行为接口,实现算法族 ...

  7. 揭秘设计模式:策略模式(Strategy)的枚举(Enum)实现

    2019独角兽企业重金招聘Python工程师标准>>> 链接地址:http://www.xx566.com/detail/120.html 上一篇:揭秘设计模式:策略模式(Strat ...

  8. 设计模式之策略模式+工厂模式+模板模式结合

    设计模式之策略模式+模板模式 为什么总是学不好设计模式 从"登录功能"中发现问题. 首先我们简单的了解功能需求: 于是你开始干活了: 1.控制层代码如下,根据不同的登录方式调用不同 ...

  9. 设计模式之策略模式(Java 实现)

    设计模式之策略模式(Java 实现) 大家一定都使用过电子地图.在地图中输入出发地和目的地,然后再选取你的出行方式,就可以计算出最优线路以及预估的时长.出行方式有驾车.公交.步行.骑行等.出行方式不同 ...

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

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

最新文章

  1. 求最大值_Excel求最大值地球人都知道,那要求出第2、第3、第N大值呢?
  2. Flex与.NET互操作(九):FluorineFx.NET的认证(Authentication )与授权(Authorization)
  3. xmanager 3 远程连接REDHAT 4 桌面
  4. 用FlatBuffers提升Android平台上Facebook的性能
  5. 如何在 C#9 中使用 static 匿名函数
  6. 网络编程模型综述 之 成熟的IO框架介绍
  7. 漫步最优化四十——Powell法(上)
  8. 在Python中检测*可用* CPU数量的便携方式
  9. [BZOJ1563][NOI2009]诗人小G[决策单调性优化]
  10. python删除行_python 删除文件中指定行
  11. edup网卡 linux,应用笔记--使用USB WiFi网卡
  12. paip.验证码识别---序列号的反转
  13. Perlin noise(一)
  14. FCM算法的matlab程序
  15. Checker框架学习笔记
  16. 《算法导论》 第28章 矩阵运算
  17. 【个人网站】个人网站搭建预备工作
  18. 风云滚滚唱英雄,云的江湖谁做主?
  19. MySQL数据库名字能不能用中划线 ‘-’ ?
  20. 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)

热门文章

  1. 7-59 打印菱形图案 (15 分)
  2. 企业中常见的审批流程
  3. 中国移动分布式块存储最大单揭晓,浪潮等中标
  4. 老鱼Python数据分析——篇十:使用selenium获取历史数据并保存
  5. JAVA开发之 37 使用数组输出古诗《春晓》
  6. 【python ACM 输入输出的处理:sys.stdin.readline().strip().split())】
  7. 39.回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
  8. 笔记-网络信息安全概述
  9. android linker重定位后初始化
  10. Camera Face Detection