java23种设计模式之策略模式

概述

        策略模式是23种设计模式之一,也是工作中出现频率比较高的设计模式之一,策略模式主要是为了针对不通业务场景做出不同行为的一种设计模式。该模式一般可以直接替换多个if eles 的场景。策略模式主要分为三个部分,策略接口,具体实现策略的类,还有一个策略上下文对象。

示例

package com.example.demo.service.strategy;/*** @author 双子的小坏* @date 2024/6/28 11:44:54* @description : 吃什么策略接口*/
public interface EatWhatStrategy {/*** 吃东西方法* @return*/String eatSomeing();
}
package com.example.demo.service.strategy;/*** @author 双子的小坏* @date 2024/6/28 11:47:05* @description :有钱的策略*/
public class HaveMoneyStrategy implements EatWhatStrategy{@Overridepublic String eatSomeing() {return "有钱当然是下馆子了!!!";}
}
package com.example.demo.service.strategy;/*** @author 双子的小坏* @date 2024/6/28 11:50:16* @description :没钱的策略*/
public class NoMoneyStrategy implements EatWhatStrategy{@Overridepublic String eatSomeing() {return "没钱就吃土呗";}
}
package com.example.demo.service.strategy;/*** @author 双子的小坏* @date 2024/6/28 11:51:36* @description : 吃什么策略的上下文对象*/
public class EatWhatStrategyContent {/*** 吃什么策略的引用*/private EatWhatStrategy eatWhatStrategy;/*** 设置策略的方法* @param eatWhatStrategy 具体策略*/public void setEatWhatStrategy(EatWhatStrategy eatWhatStrategy){this.eatWhatStrategy = eatWhatStrategy;}/*** 调用吃什么的方法*/public String eat(){return   eatWhatStrategy.eatSomeing();}
}
package com.example.demo.service.strategy;/*** @author 双子的小坏* @date 2024/6/28 11:56:32* @description : 策略模式*/
public class StrategyDemo {public static void main(String[] args) {//创建上下文对象EatWhatStrategyContent eatWhatStrategyContent = new EatWhatStrategyContent();//设置有钱的策略eatWhatStrategyContent.setEatWhatStrategy( new HaveMoneyStrategy());//调用策略方法进行返回String eatStr = eatWhatStrategyContent.eat();System.out.println(eatStr);//设置没钱的策略eatWhatStrategyContent.setEatWhatStrategy(new NoMoneyStrategy());//调用策略方法进行返回eatStr = eatWhatStrategyContent.eat();System.out.println(eatStr);}
}

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

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

相关文章

[数据集][目标检测]棉花叶子害虫检测数据集VOC+YOLO格式595张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):595 标注数量(xml文件个数):595 标注数量(txt文件个数):595 标注类别…

找不到xinput1_3.dll怎么办,实测有效的几种方法分享

在日的使用电脑过程中,我们经常会遇到各种各样的问题。其中之一就是找不到xinput1_3.dll文件。这个问题可能会影响到我们的游戏体验,甚至导致电脑无法正常运行。那么,又该如何解决这个问题呢?小编将全面解析找不到xinput1_3.dll对…

老无忧,成熟人士都在玩的社交app

随着互联网向不同年龄群体的进一步渗透,越来越多大龄人士逐步在传统以年轻人为主的平台中搭建起自己的空间,对缔结社交关系的需求也变得强烈起来。老无忧无忧交友app应运而生,于2024年6月1日正式上线(以下简称“老无忧”&#xff…

深入解析npm install --save-dev:开发依赖管理的艺术

npm(Node Package Manager)是JavaScript编程语言的包管理器,用于管理项目中的依赖关系。在开发过程中,合理地管理依赖是保证项目可维护性和可扩展性的关键。npm install命令是npm中最常用的命令之一,而--save-dev参数则…

基于Java仓储出入库管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…

GPU算力是什么,哪些行业需要用到GPU算力?

近两年,计算能力已成为推动各行各业发展的关键因素。而GPU(图形处理器)算力,作为现代计算技术的重要分支,正逐渐在多个领域展现出其强大的潜力和价值。尚云将简要介绍GPU算力的定义和基本原理,并探讨其在哪…

CSS盒子模型:深入理解网页布局的基石

在网页设计和开发中,CSS盒子模型是构建布局的基础。它决定了元素在页面上的显示方式,包括元素的大小、间距以及它们如何相互交互。本文将详细介绍CSS盒子模型的各个方面,包括内容区、内边距、边框、外边距以及它们在实际布局中的应用。 盒子…

使用minio搭建oss

文章目录 1.minio安装1.拉取镜像2.启动容器3.开启端口1.9090端口2.9000端口 4.访问1.网址http://:9090/ 5.创建一个桶 2.minio文件服务基本环境搭建1.创建一个文件模块2.目录结构3.配置依赖3.application.yml 配置4.编写配置类MinioConfig.java,构建minioClient5.Fi…

Verilog进行结构描述(四):Verilog逻辑强度(strength)模型

目录 1.Verilog提供多级逻辑强度。2.基本单元强度说明语法3.信号强度值系统4.Verilog多种强度决断 微信公众号获取更多FPGA相关源码: 1.Verilog提供多级逻辑强度。 逻辑强度模型决定信号组合值是可知还是未知的,以更精确的描述硬件的行为。下面这些情…

web自动化(二)元素定位 xpath定位css定位

常用的元素定位:ID,Name,xpath,css 等等 selenuim demo import timefrom selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support imp…

数学建模---最小生成树问题的建模~~~~~Matlab代码

目录 1.相关概念 (1)什么是树 (2)生成树和最小生成树: 2.适用赛题 (1)赛题分类 (2)不同之处 3.两种算法 (1)prim算法 (2&…

linux 下启动app

创建启动脚本: 创建一个启动脚本,命名为你的应用程序或服务的名称。这个脚本负责启动、停止和管理你的应用程序。你可以使用 sudo 权限和任何文本编辑器创建这个脚本,比如 nano: bash sudo nano /etc/init.d/my_app 在编辑器中输入启动脚本的内容。一个简单的例子可能如下…

java调用海康威视SDK实现车牌识别

我采用的是 报警布防方式 SDK版本为 CH-HCNetSDKV6.1.9.48_build20230410_win32 如何引用dll 我用的是jna 就不描述了 SDK在官网自行下载 以下代码亲测可用 自行参考~ 1.1接口调用流程 虚线框的内容是可选的,设备事先安装配置好,能力集和配置接口可…

Linux高级编程——线程

pthread 线程 概念 :线程是轻量级进程,一般是一个进程中的多个任务。 进程是系统中最小的资源分配单位. 线程是系统中最小的执行单位。 优点: 比多进程节省资源,可以共享变量 进程会占用&am…

【高考】选专业时,应避免的误区

【高考】选专业时,应避免的误区-CSDN博客 【高考】选专业时以什么为主?-CSDN博客 分数限制下,选好专业还是选好学校?-CSDN博客 分数限制下,选好专业还是选好学校?-CSDN博客 在选专业时,考生…

解析 ThreadLocal 原理

ThreadLocal用于线程局部变量的一个工具类。 原理是为每个线程创建独立的变量副本,从而实现线程数据的隔离。具体来说,ThreadLocal 通过一个 ThreadLocalMap来实现,这个 ThreadLocalMap 是一个自定义的哈希表,用于存储线程和对应的…

Qt creator实现一个简单计算器

目录 1 界面设计 2 思路简介 3 代码 目录 1 界面设计 ​2 思路简介 3 代码 3.1 widget.h 3.2 widget.c 4 完整代码 在这里主要记载了如何使用Qt creator完成一个计算器的功能。该计算器可以实现正常的加减乘除以及括号操作,能实现简单的计算器功能。 1 界…

Hadoop版本演变、分布式集群搭建

Hadoop版本演变历史 Hadoop发行版非常的多,有华为发行版、Intel发行版、Cloudera Hadoop(CDH)、Hortonworks Hadoop(HDP),这些发行版都是基于Apache Hadoop衍生出来的。 目前Hadoop经历了三个大的版本。 hadoop1.x:HDFSMapReduce hadoop2.x…

MySQL学习_python操作MySQL

用python连接数据库分为以下几个步骤 1.首先下载pymysql pip install pymysql2.创建数据 # 1.导入pymysql import pymysql # 2.连接MySQL conn pymysql.connect(host127.0.0.1,port3306,userroot,charsetutf8,dbunicom) cursor conn.cursor(cursorpymysql.cursors.DicCurso…

uniapp开发企业微信内部应用

最近一直忙着开发项目,终于1.0版本开发完成,抽时间自己总结下在项目开发中遇到的技术点。此次项目属于自研产品,公司扩展业务,需要在企业微信中开发内部应用。因为工作中使用的是钉钉,很少使用企业微信,对于…