java设计模式:策略模式

news2024/9/23 17:14:16

        在平常的开发工作中,经常会用到不同的设计模式,合理的使用设计模式,可以提高开发效率,提高代码质量,提高代码的可拓展性和维护性。今天来聊聊策略模式。

        策略模式是一种行为型设计模式,运行时可以根据需求动态地选择算法和操作。策略模式可以避免大量的使用条件语句,使代码简洁,可读性强,提高代码的可维护性。策略模式主要包括:

        环境上下文:执行具体的策略,即使用策略入口类

        策略:定义算法或者抽象方法

        具体策略:实现具体的算法或者抽象方法

        策略模式主要使用场景:

        1:避免条件语句嵌套:如果有多个if - else条件,会使代码变得看起来很复杂,使用策略模式可以简化,是代码更加简洁。

        2:支付方式的选择:电商系统中支付模块,可以根据用户选择的支付方式,动态的选择不同的方法。

        3:一个系统要在多个算法中动态选择一个时,将每个算法封装到策略中。

        简单代码示例:

        环境上下文类:

package test.boot.strategy;

public class Context {

    private Strategy strategy;

    public Context() {

    }

    public void  setStrategy(Strategy strategy){
        this.strategy = strategy;
    }

    public void execute() {
        strategy.strategyExecute();
    }

}

        策略接口:

package test.boot.strategy;

public interface Strategy {

    void strategyExecute();

}

        策略实现类:

package test.boot.strategy;

public class StrategyFirst implements Strategy{
    @Override
    public void strategyExecute() {
        System.out.println("StrategyFirst strategyExecute");
    }
}
package test.boot.strategy;

public class StrategySecond implements Strategy {
    @Override
    public void strategyExecute() {
        System.out.println("StrategySecond strategyExecute");
    }
}

        测试类:

package test.boot.strategy;

public class StrategyTest {

    public static void main(String[] args) {
        Context context = new Context();
        context.setStrategy(new StrategyFirst());
        context.execute();
        context.setStrategy(new StrategySecond());
        context.execute();
    }

}

        运行结果:

       

        以上为策略模式的简单示例。美好的风景一直在路上。加油,才能遇见更好的自己!

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

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

相关文章

Stable diffusion使用和操作流程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它…

Windows下MySQL的界面安装

华子目录 下载MySQL安装MySQL配置MySQL配置环境变量检验MySQL是否安装成功 下载MySQL 首先我们在MySQL的官方下载MySQL https://www.mysql.com 点击download,开始下载 安装MySQL 下载完成后,我们双击msi文件 再点击next 之后我们先勾选I acc…

leetcode 1.两数之和(C++)DAY1(待补充哈希表法)

文章目录 1.题目描述示例提示 2.解答思路3.实现代码结果4.总结 1.题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&…

堪称灾难级攻击的 UDP FLOOD洪水攻击,应该如何防护?

DDOS又称为分布式拒绝服务,全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载,导致服务不可用,从而造成服务器拒绝正常流量服务。就如酒店里的房间是有固定的数量的,比如一个酒店有50个房间,当…

Java语法学习线程基础

Java语法学习线程基础 大纲 概念创建线程线程终止常用方法用户线程和守护线程线程的七大状态线程的同步互斥锁线程死锁释放锁 具体案例 1.概念 2. 创建线程 第一种: class Cat extends Thread {int time 0;Overridepublic void run() {while (true) {System.o…

计算机网络_1.5 计算机网络的性能指标

1.5 计算机网络的性能指标 一、总览二、常用的八个计算机网络性能指标1、速率(1)数据量(2)速率(3)数据量与速率中K、M、G、T的数值辨析(4)【练习1】计算发送数据块的所需时间 2、带宽…

C++ OpenGL绘制三维立体skybox场景obj模型AABB碰撞检测旋转动画界面

程序示例精选 C OpenGL绘制三维立体skybox场景obj模型AABB碰撞检测旋转动画界面 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《C OpenGL绘制三维立体skybox场景obj模型AABB碰撞检测旋转动…

使用Ettus USRP X440对雷达和EW系统进行原型验证

概览 无论是保障己方平台的生存能力,还是扰乱敌方频谱使用,以电磁(EM)频谱为主导都是任务成功的主要因素。电磁频谱操作(Electromagnetic Spectrum Operation, EMSO)需要使用战术系统来监测敌方的频谱活动、定位其发射器并帮助己方制定行动计划。软件无…

存算一体:架构创新,打破算力极限

1 需求背景 在全球数据量呈指数级暴涨,算力相对于AI运算供不应求的现状下,存算一体技术主要解决了高算力带来的高能耗成本矛盾问题,有望实现降低一个数量级的单位算力能耗,在功耗敏感的百亿级AIoT设备上、高能耗的数据中心、自动驾…

VSCode 安装LLDB调试器(OS X)并启动调试

插件:(LLDB插件安装) 安装这个版本不好弄错了,CodeLLDB(名字) 配置:(LLDB启动调试) {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更…

阻塞队列(超详细易懂)

目录 一、阻塞队列 1.阻塞队列概述 2.生产者消费者模型 3.阻塞队列的作用 4.标准库中的阻塞队列类 5.例子:简单生产者消费者模型 二、阻塞队列模拟实现 1.实现循环队列(可跳过) 1.1简述环形队列 1.2代码实现 2.实现阻塞队列 2.1实…

CMake生成osg的FFMPEG插件及Windows下不生成VS工程问题解决

在Windows下,如何利用CMake生成osg的FFMPEG插件,请参考如下博文,同生成jpeg插件类似: osg第三方插件的编译方法(以jpeg插件来讲解)。 如下为生成FFMPEG时必要的设置: 注意: 一定要…

开发智能化企业培训平台:教育系统源码的创新方法

在传统的企业培训模式中,往往面临着效率低下、内容过时以及难以个性化的问题。为了解决这些挑战,采用智能化技术成为了企业培训领域的热门趋势。通过开发智能化企业培训平台,可以提高培训效果、降低成本,并更好地满足员工多样化的…

海量数据处理商用短链接生成器平台 - 2

第二章 短链平台项目创建git代码管理开发分层规范 第1集 短链平台实战-Maven聚合工程创建微服务项目 **简介:Maven聚合工程创建微服务项目实战 ** Maven聚合工程拆分 dcloud-common 公共依赖包 dcloud-app FlinkKafka实时计算 dcloud-account 账号流量包微服务 dc…

Oracle 面试题 | 10.精选Oracle高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【深度测试】看到技术方案后,该怎么进行分析和测试

测试左移的思想,讲究尽早测试,测试是一系列的行为,并不一定要等代码运行起来才能测,下面会分享一些经验,提供大家参考。 一、静态分析 1.1 分析方法调用链 目标:梳理结构,化繁为简 原理&#…

Quppy wise 注册教程,轻松通过欧洲银行同名转账绑定个人IBAN账号

Quppy 注册教程,轻松通过欧洲银行同名转账绑定个人IBAN账号 官网下载APP或者去香港区下载APP使用, 按照官方APP里的邮箱注册就行,成功后添加电话和个人信息;需要说明的是:网站所填内容请全部用真实身份填写;名在前,姓…

华为机考入门python3--(7)牛客7-取近似值

分类:数字 知识点: str转float float(str) 向上取整 math.ceil(float_num) 向下取整 math.floor(float_num) 题目来自【牛客】 import math def round_to_int(float_num): # 如果小数点后的数值大于等于0.5,则向上取整&#xf…

计算机视觉中的目标跟踪

从保护我们城市的监控系统到自动驾驶车辆在道路上行驶,目标跟踪已经成为计算机视觉中的一项基础技术。本文深入探讨了目标跟踪,探索了其基本原理、多样化的方法以及在现实世界中的应用。 什么是目标跟踪? 目标跟踪是深度学习在计算机视觉中广…

分布式任务调度框架XXL-JOB详解

分布式任务调度 概述 场景: 如12306网站根据不同车次设置放票时间点,商品成功发货后向客户发送短信提醒等任务,某财务系统需要在每天上午10天前统计前一天的账单数据 任务的调度是指系统为了完成特定业务,基于给定的时间点,时间间隔&#…