设计模式学习:策略模式
策略模式简介
策略模式:策略模式是一种行为型模式,它将对象和行为分开,将行为定义为 一个行为接口
和 具体行为的实现
。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个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
内容参考《大话设计模式》
设计模式学习:策略模式相关推荐
- swift设计模式学习 - 策略模式
移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 策略模式 策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. ...
- 设计模式学习---策略模式
最近在看"Head First 设计模式"这本书,便想将自己所学的记录下来以加深理解,文中肯定有许多不足之处,请各位前辈们指出. 什么是设计模式 设计模式并不是某种开发语言中的工具 ...
- 设计模式学习--策略模式
前言 使用策略模式可以代替多重if-else和switch语句,让代码维护变得更加简单,乍一看跟工厂模式一模一样,下面是个简单的例子.策略模式包含以下三种角色: 环境(Context)角色:持有一个S ...
- JavaScript设计模式之策略模式(学习笔记)
在网上搜索"为什么MVC不是一种设计模式呢?"其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composi ...
- 换个姿势学设计模式:策略模式
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:公众号「闻人的技术博客」 前言 前段时间,接到一个 ...
- 策略设计模式_设计模式之策略模式总结
再上一篇文章<设计模式之策略模式>中,我们通过模拟鸭子项目,了解了什么是策略模式,怎么使用策略模式.本文将通过鸭子项目的学习,对策略模式进行总结. 策略模式: 分别封装行为接口,实现算法族 ...
- 揭秘设计模式:策略模式(Strategy)的枚举(Enum)实现
2019独角兽企业重金招聘Python工程师标准>>> 链接地址:http://www.xx566.com/detail/120.html 上一篇:揭秘设计模式:策略模式(Strat ...
- 设计模式之策略模式+工厂模式+模板模式结合
设计模式之策略模式+模板模式 为什么总是学不好设计模式 从"登录功能"中发现问题. 首先我们简单的了解功能需求: 于是你开始干活了: 1.控制层代码如下,根据不同的登录方式调用不同 ...
- 设计模式之策略模式(Java 实现)
设计模式之策略模式(Java 实现) 大家一定都使用过电子地图.在地图中输入出发地和目的地,然后再选取你的出行方式,就可以计算出最优线路以及预估的时长.出行方式有驾车.公交.步行.骑行等.出行方式不同 ...
- Java设计模式之策略模式与状态模式
一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...
最新文章
- 求最大值_Excel求最大值地球人都知道,那要求出第2、第3、第N大值呢?
- Flex与.NET互操作(九):FluorineFx.NET的认证(Authentication )与授权(Authorization)
- xmanager 3 远程连接REDHAT 4 桌面
- 用FlatBuffers提升Android平台上Facebook的性能
- 如何在 C#9 中使用 static 匿名函数
- 网络编程模型综述 之 成熟的IO框架介绍
- 漫步最优化四十——Powell法(上)
- 在Python中检测*可用* CPU数量的便携方式
- [BZOJ1563][NOI2009]诗人小G[决策单调性优化]
- python删除行_python 删除文件中指定行
- edup网卡 linux,应用笔记--使用USB WiFi网卡
- paip.验证码识别---序列号的反转
- Perlin noise(一)
- FCM算法的matlab程序
- Checker框架学习笔记
- 《算法导论》 第28章 矩阵运算
- 【个人网站】个人网站搭建预备工作
- 风云滚滚唱英雄,云的江湖谁做主?
- MySQL数据库名字能不能用中划线 ‘-’ ?
- 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)
热门文章
- 7-59 打印菱形图案 (15 分)
- 企业中常见的审批流程
- 中国移动分布式块存储最大单揭晓,浪潮等中标
- 老鱼Python数据分析——篇十:使用selenium获取历史数据并保存
- JAVA开发之 37 使用数组输出古诗《春晓》
- 【python ACM 输入输出的处理:sys.stdin.readline().strip().split())】
- 39.回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
- 笔记-网络信息安全概述
- android linker重定位后初始化
- Camera Face Detection