设计模式—行为型模式之策略模式

设计模式—行为型模式之策略模式

策略(Strategy)模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。属于对象行为模式。

策略模式的主要角色如下。

  • 抽象策略(Strategy)类:公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
  • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
  • 环境(Context)类:持有一个策略类的引用,最终给客户端调用。

示例

比如在玩游戏时,都有策略,但是不同战队有不同的策略。

代码如下:

/*** 游戏策略类*/
public interface GameStrategy {void warStartegy();
}
/*** 灵活策略类*/
public class FlexibleStartegy implements GameStrategy{@Overridepublic void warStartegy() {System.out.println("灵活策略...该防御防御,该冲时冲");}
}
/*** 暴力策略类*/
public class ViolenceStrategy implements GameStrategy{@Overridepublic void warStartegy() {System.out.println("暴力策略。一直向前冲。。。");}
}/*** 战队类*/
public class GameTeam {//策略private GameStrategy gameStrategy;public void setGameStrategy(GameStrategy gameStrategy) {this.gameStrategy = gameStrategy;}public void playGame(){System.out.println("我们的战队策略如下:");gameStrategy.warStartegy();System.out.println("加油");}
}

测试类如下

public class StartegyTest {public static void main(String[] args) {GameTeam gameTeam1 = new GameTeam();gameTeam1.setGameStrategy(new FlexibleStartegy());gameTeam1.playGame();GameTeam gameTeam2 = new GameTeam();gameTeam2.setGameStrategy(new ViolenceStrategy());gameTeam2.playGame();}
}

运行结果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/337583.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

针对大规模服务日志敏感信息的长效治理实践

文章目录 1 背景2 目标与措施3 实施3.1 脱敏工具类3.2 JSON脱敏3.3 APT自动脱敏3.3.1 本地缓存问题3.3.2 JDK序列化问题 3.4 弃用方案 4 规划5 总结 1 背景 近年来,国家采取了多项重要举措来加强个人数据保护,包括实施《中华人民共和国网络安全法》和《…

车速预测 | Matlab基于RBF径向基神经网络的车速预测模型(多步预测,尾巴图)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 车速预测 | Matlab基于RBF径向基神经网络的车速预测模型(多步预测,尾巴图) 程序设计 完整程序和数据获取方式:私信博主回复Matlab基于RBF径向基神经网络的车速预测模型…

【python入门】day24:千年虫问题、京东购物流程、根据星座测试性格特点

千年虫 yList[82,17,73,56,84,0,99] print(原列表:,yList) for index,val in enumerate(yList):yList[index]2000 if val0 else 1900 print(更改后列表:,yList) yList.sort() print(排序后列表:,yList)enumerate的作用:会把列表中…

Android逆向学习(六)绕过app签名校验,通过frida,io重定向(上)

Android逆向学习(六)绕过app签名校验,通过frida,io重定向(上) 一、写在前面 这是吾爱破解正己大大教程的第五个作业,然后我的系统还是ubuntu,建议先看一下上一个博客,关…

基于NFC(215芯片)和酷狗音乐实现NFC音乐墙

前言: 本文方案可以实现直接调起酷狗音乐app自动播放,而非跳转网址 准备工作: nfc toolsnfc task酷狗音乐APPalook浏览器APP 步骤 1.选一首歌 2.右上角选择分享,选择复制链接 复制内容为: 分享胡夏的单曲《爱夏…

【博士每天一篇论文-算法】Optimal modularity and memory capacity of neural reservoirs

阅读时间:2023-11-15 1 介绍 年份:2019 作者:Nathaniel Rodriguez 印第安纳大学信息学、计算和工程学院,美国印第安纳州布卢明顿 期刊: Network Neuroscience 引用量:39 这篇论文主要研究了神经网络的模块…

selenium2023最全攻略(元素操作,浏览器操作等)附完整代码!

一、元素操作方法 方法: 1、.send_keys() # 输入方法 2、.click() # 点击方法 3、.clear() # 清空方法 注意:在输入方法之前一定要清空操作!! # 导包 from time import sleep from selenium import webdriver # 实例化浏览器 driver webdriver.Chrome(…

AI实景自动直播项目怎么样?解决实体行业直播难题!

在如今的互联网时代,作为实体老板想要在激烈的同行竞争中占领优势,那短视频和直播必然是要做的推广渠道之二,但是最近短视频流量持续下滑,带来的订单量越来越少,必然直播将成为常态化的宣传动作,如今抖捧AI…

__init__中的__getattr__方法

结论: 在 __init__.py 文件中定义的 __getattr__ 方法,如果存在的话,通常用于处理包级别的属性访问。在包级别,__getattr__ 方法在导入模块时被调用,而不是在实例化包时。当你尝试访问包中不存在的属性时,__getattr__ 方法会被调用,给你一个机会来处理这个属性访问。 …

项目整体管理

整体管理之10大项目管理: 核心域:进度,成本,质量,范围 辅助域:风险,沟通,采购,人力资源,干系人 项目管理相关方: 招标:买方&#x…

【HDFS】一次备NameNode宕机过久导致的生产事故

一次备NameNode宕机过久导致的生产事故 故障描述 最近发生的一个临时故障,情况是一个启了HA的HDFS集群,在2023年9月份因为两台NameNode同时启动产生一些问题,所以当时将一台节点停止,一直没有启动,具体为什么当时有问…

CH341 SPI方式烧录BK7231U

CH341是一个USB总线的转接芯片,通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。 BK7231U Wi-Fi SOC芯片,内嵌处理器。1. 符合802.11b/g/n 1x1协议 2. 17dBm 输出功率3. 支持20/40 MHz带宽和STBC 4. 支持Wi-Fi STA、AP、…