策略模式

策略模式详解 1.简介 在现实生活中长长遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超时促销可以采用打折、送商品、送积分等方法。 在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。 如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加。删除或更换算法要修改原代码,不易维护,违背开闭原则。如 阅读详情

原文地址:https://www.jianshu.com/p/b2ab047ea687

定义一组算法,将算法都封装起来,并且是他们之间可以互换的
简单的说就是把方法封装在方法中,调用不同对象的相同方法实现的算法是不同的
类图如下

 

策略模式类图

Strategy是策略的抽象类
ConcreteStrategy是策略的具体实现类
Context是策略的管理类

假设一种场景
我们可以用不同的东西喝水,杯,碗,甚至是手捧着喝,下面用代码实现
1,首先创建一个策略的喝水接口

public interface DrinkWaterStrategy {
    void drink();
}

2,策略的具体实现类,用杯子喝水,用碗喝水,用手捧着喝水

public class Cup implements DrinkWaterStrategy {

    @Override
    public void drink() {
        System.out.println("用杯喝水");
    }
}

public class Bowl implements DrinkWaterStrategy{
    @Override
    public void drink() {
        System.out.println("用碗喝水");
    }
}

public class Hand implements DrinkWaterStrategy{
    @Override
    public void drink() {
        System.out.println("用手捧着喝水");
    }
}

3,策略的管理类

public class Person {
    private DrinkWaterStrategy drinkWaterStrategy;

    public Person(DrinkWaterStrategy drinkWaterStrategy){
        this.drinkWaterStrategy = drinkWaterStrategy;
    }

    public void drink(){
        drinkWaterStrategy.drink();
    }
}

4,调用

public class Main {
    public static void main(String[] args){
        Person person = null;
        person = new Person(new Bowl());
        person.drink();
        person = new Person(new Cup());
        person.drink();
        person = new Person(new Hand());
        person.drink();
    }
}

总结
策略模式扩展很方便,可自由切换算法,避免多重条件判断,扩展性好
会使类数量增多

还有一种比较特殊的写法,就是策略枚举代码如下

public enum  Calculator {

    ADD("+"){
        @Override
        public int exec(int a, int b) {
            return a + b;
        }
    },
    SUB("-"){
        @Override
        public int exec(int a, int b) {
            return a - b;
        }
    };

    String value;

    private Calculator(String value){
        this.value = value;
    }

    public String getValue(){
        return this.value;
    }

    public abstract int exec(int a,int b);
}

这种方式可扩展性查,适用于不经常变化的角色

task5:在本地搭建大模型(ollama 和 LM studio 对比),接入 openclaw 关于大模型,大家千万不要想着在本地部署,根本不可行,没有那个财力。另外大模型迭代快,不可能每周都在下载大模型。再次,还是国外的模型好用,国内的模型真的在 deepresearch 上就有很大问题,你们懂的。所以本篇文章,还是聚焦在探索层面+实操,并不会实战。 阅读详情

相关推荐

Windows 10 下 Nacos 3.0.2 单机版保姆级安装教程(含JDK 17配置与MySQL 8.0连接避坑)

本文提供Windows 10下Nacos 3.0.2单机版的详细安装教程,涵盖JDK 17配置、MySQL 8.0连接优化及生产级安全设置。通过步骤详解和常见问题解决方案,帮助开发者快速完成Nacos的安装与配置,确保服务发现与配置管理的高效运行。

weixin_29237635的博客 319

java策略模式

目录 1 策略模式概述 2 策略模式的结构与实现 1. 模式的结构 2. 模式的实现 3 策略模式的应用实例 通用实现 报价管理的例子 策略和上下文的实例 1 策略模式概述  策略这个词应该怎么理解,打个比方说,我们出门的时候会选择不同的出行方式,比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等,这些出行方式,每一种都是一个策略。   再比如我们去逛商场,商场现在正在搞活动,有打折的、有满减的、有返利的等等,其实不管商场如何进行促销,说到底都是一些算法,这些算法本身只是一种策略,并且这

mocas_wang的博客 4513

stm32开发3D打印机(一)——介绍(已完成)

如何运用stm32开发3D打印机

Nico_jion的博客 1万+

策略模式详解以及在spring中策略模式的两种简化应用

策略模式,同样可以消除掉繁杂的if else ,那么它和简单工厂模式的区别在哪? 简单工厂模式是根据传入的参数返回不同的产品,不同的产品内部封装了不同的逻辑。 策略模式类似,但是策略模式内部是封装了算法,也就是封装了某一种策略。 举个例子,超市活动打折优惠,1.普通计费。 2.满300减20 3.满400减80 4.满500打八折 如果用简单工厂模式,那么需要定义四个产品子类,如果将来又新增了...

hello world 7782

Wafer的T7 Code是什么,怎么来的

在半导体Cim系统中,waferstart 业务需要支持 Sorter 读取 Wafer 的 T7 Code,与 MES 的 Wafer ID 进行绑定,以便向 前追溯 Wafer 历史,那么问题来了,T7code 是什么Wafer的T7 Code是一种,用于标识双面抛光的晶圆。这种标记采用二维矩阵代码符号,适用于各种尺寸的晶圆,不仅限于450mm无缺口晶圆7。T7 Code是衬底来料背面通常会有的供应商刻的追溯ID,这是一串数字和字母组成的流水码。

阿拉伯梳子的专栏 7923

【NLP】语言模型的发展历程 (1)

N-gram模型是一种基于统计语言模型的文本分析算法,它用于预测文本中下一个词出现的概率,基于前面出现的n-1个词的序列。这里的n代表序列中元素的数量,因此称为N-gram。Unigram:N=1,每个单词的出现概率独立计算,不考虑上下文。Bigram:N=2,基于前一个单词预测当前单词的联合概率模型。Trigram:N=3,考虑前两个单词来预测当前单词的联合概率模型,更复杂但可能更准确。

酒酿小圆子呀~ 1667

策略模式的实现

策略模式就像是在餐厅点餐的过程。假设你和朋友一起去餐厅,你们可以根据自己的口味选择不同的菜肴。你可以点披萨,你的朋友可以点汉堡,而另一位朋友可以点沙拉。每个人都可以根据自己的喜好选择不同的策略(菜肴),但最终都能满足吃东西的需求。

Hardy Army的博客 1284

ESP32Servo库驱动SG90舵机:从入门到精准控制

本文详细介绍了如何使用ESP32Servo库驱动SG90舵机,从硬件连接到软件环境搭建,再到编写示例程序实现精准控制。内容涵盖库安装、基础驱动代码解析、舵机校准方法以及平滑运动控制,帮助开发者快速掌握ESP32控制舵机的核心技能,并提供了电源管理、信号抗干扰等实用避坑指南。

ik678901的博客 895

【python】策略模式

策略模式。抽空学习下常见的20几种设计模式,python2.7来设计实现。基本就根据某设计模式书籍来实现python版本。希望能坚持下来全部介绍完。

weixin_42660118的博客 2624

从零搭建PIC MCU开发环境:MPLAB IDE与HI-TECH编译器安装破解全攻略

本文详细介绍了从零搭建PIC MCU开发环境的完整流程,包括MPLAB IDE 8.85的安装配置、HI-TECH C编译器的安装与破解,以及PICkit3编程器的使用技巧。通过清晰的步骤说明和常见问题解决方案,帮助开发者快速搭建稳定的PIC单片机开发环境,适用于PIC16/18系列MCU开发。

weixin_29188997的博客 291

UNet改进(52):轴向+代理注意力让UNet既轻快又精准

本文提出了一种改进的UNet架构,通过引入轴向注意力代理模块增强医学图像分割性能。该模块将二维自注意力分解为行列两个一维注意力操作,结合可学习代理节点进行全局信息聚合,在保持计算效率的同时提升模型对长距离依赖的建模能力。实验表明,该方法在多个医学图像数据集上较传统UNet提升3.2%-5.7%的Dice系数,边界质量显著改善。该方案特别适用于具有方向性结构的医学图像分割任务,如血管、器官等,在计算复杂度和分割精度之间实现了良好平衡。

2501_91516851的博客 327

策略模式&lambda重构策略模式

文章目录一、概念以及背景二、策略模式三、lambda重构策略模式三、拓展Java8提供的内置函数式接口 一、概念以及背景 策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户端而变化,也称为政策模式(Policy)。 简而言之,策略模式是客户端在运行时选择某种解决方案(策略,方法,算法)来解决问题,而解决方...

一砖一瓦 895

YOLOv11训练:Roboflow免费数据集获取与格式转换超详细教程

公共数据集库:包含超过20,000个开源数据集数据标注工具:支持在线标注和团队协作数据预处理:自动增强、扩充和格式化版本控制:像管理代码一样管理数据集版本多格式导出:支持所有主流目标检测格式import cv2# 加载图像# 加载标注# 数据增强# 调整尺寸# 调整标注坐标# 转换为Tensor# 实现保持长宽比的resize逻辑pass# 坐标转换逻辑pass# 数据增强实现pass数据集选择优先选择Roboflow上标注质量高的官方数据集。

weixin_39818775的博客 2360

23种策略模式之策略模式

在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(Strategy Pattern)是其中一种常见的设计模式,它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类,使得它们可以相互替换,而不影响客户端的使用。策略模式与其他设计模式有一些明显的区别。与模板方法模式相比,策略模式强调算法的灵活性,允许在运行时切换不同的策略。与状态模式相比,策略模式更注重不同算法之间的替换性,而非状态的内部转换。策略Context(上下文)

一码归一码@ 1899

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

策略模式总结

文章目录策略模式一、什么是策略模式二、为什么要去使用策略模式三、框架中有哪些用到模板模式和策略模式四、项目实践中的策略模式实现五、总结1、策略模式的优缺点 策略模式 一、什么是策略模式 ​ 策略模式(Strategy Pattern),一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 ​ 策略模式适合于以下应用场景: 1)、许多类的区别仅在于其具体实现行为不同; 2)、需要动态的在几个算法中选择一个。 传统策略模式介绍: https://www.runoob.com/design

小发发的博客 768

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【深入设计模式】策略模式—策略模式详解及策略模式在源码中的应用

详解策略模式,并深入策略模式再源码中的应用

SK_Jaco的博客 1357

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

前端策略模式

前端策略模式 文章目录前端策略模式一、策略模式有什么用二、策略模式的定义二、策略模式有什么用1.引入库2.读入数据总结 一、策略模式有什么用 策略模式主要是为了实现开闭原则,减少面条代码里面大量的写if…else 二、策略模式的定义 定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 二、策略模式有什么用 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import

qq_39406460的博客 1773

java策略模式_Java设计模式之策略模式详解

本文实例为大家分享了Java策略模式,供大家参考,具体内容如下1、策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern)。定义如下:Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之...

weixin_42355744的博客 1959
上一篇: 装饰者模式
下一篇: 适配器模式
杨殿生
博客等级 码龄10年 11粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值