【设计模式】行为型01策略模式(strategy patten)

ParetOS:一个基于React+TypeScript的开发者学习平台架构解析 在Web开发领域,单页面应用(SPA)和渐进式Web应用(PWA)已成为构建现代、高性能Web平台的主流技术方案。SPA通过动态加载内容提供流畅的用户体验,而PWA则利用Service Worker等现代浏览器能力,实现离线访问和类原生应用的体验,显著提升了Web应用的可访问性和用户粘性。这些技术的核心价值在于能够构建跨平台、易于维护且功能丰富的复杂应用,尤其适用于教育科技、协作工具等需要高度交互性的场景。本文以ParetOS项目为例,深入剖析如何运用React、TypeScript和PWA技术栈,结合模块 阅读详情

     学设计模式一段时间了,有些懂了,有些半知半解,通过写笔记博客的方式总结一下:

     关于策略模式,我的个人理解就是将一些经常变动的算法独立抽取出来,可以是一个方法,也可以是一个策略类,这样,如果有需求变更,只需要添加新的策略类然后进行调用切换即可。

     虽然个人使用时一般是抽取为方法,但是以面向对象的角度以及书上的类图来看,采用策略类比较符合面向对象的思想。当然也不必墨守成规,灵活健壮清晰可读即可,不必过度去设计。


策略模式

1、场景:

用于经常变动的业务场景或算法。

2、类图:


整个策略的消费者,对应类图中的Context:

package com.pat.stratage;
/**
 * 策略消费者
 * @author Administrator
 *
 */
public class Context {
	//策略对象
	private Stratage stratage;
	
	public void calculate() {
		//调用策略类中的具体策略
		stratage.algo();
	}
	
	//构造方法
	public Context() {}
	public Context(Stratage stratage) {
		this.stratage=stratage;
	}
		
}

策略的接口类:

package com.pat.stratage;
/**
 * 具体策略接口
 * @author Administrator
 *
 */
public interface Stratage {
	public void algo();
}

具体策略1

package com.pat.stratage;
/**
 * 策略实现类1
 * @author Administrator
 *
 */
public class StratageA implements Stratage{

	@Override
	public void algo() {
		System.out.println("执行策略A");
		
	}

}

具体策略2

package com.pat.stratage;

public class StratageB implements Stratage{

	@Override
	public void algo() {
		System.out.println("执行策略B");
		
	}

}

具体策略3

package com.pat.stratage;

public class StratageC implements Stratage{

	@Override
	public void algo() {
		System.out.println("执行策略C");
		
	}

}

测试:

package com.pat.stratage;

public class TestStratage {
    public static void main(String[] args) {
        //生产策略A对象
        Stratage str = new StratageA();
        //构造消费者对象
        Context con = new Context(str);
        //调用方法
        con.calculate();
        
        //生产策略B对象
        Stratage str2 = new StratageB();
        //构造消费者对象
        Context con2 = new Context(str2);
        //调用方法
        con2.calculate();
    }
}



控制台打印结果:
执行策略A
执行策略B

3、拓展提升:

上面只是策略模式的基本用法,还可以横向扩展或与其它设计模式结合,从而更灵活的运用。

例如,每个策略都需要传入参数返回计算完成的结果等等,这里不多解释了,记住核心,随机应变即可。

   

设计模式之策略模式源码 这个工程是设计模式中的策略模式的源码工程,该工程主要以一个简单的收银系统来体现策略模式的思想,仅供参考。 注:该工程包含了计算器-简单工厂模式的相关代码 立即下载

相关推荐

告别手动输入!用Burp插件+ddddocr,5分钟搞定图片验证码自动识别

本文详细介绍了如何利用Burp插件和ddddocr开源库快速构建图片验证码自动识别系统,实现高效、零成本的验证码自动化解决方案。通过环境搭建、性能调优和Burp Suite深度集成,显著提升安全测试效率,特别适用于金融和电商系统的批量测试场景。

weixin_29099217的博客 202

策略模式(Strategy Pattern)

相信大家对于if-else if-else 应该再也熟悉不过,也肯定曾经想过如何去减少使用不必要的if-else if-else 和switch这样的条件语句,学习了策略模式之后,你会发现原来代码还可以更简洁。 一、策略模式概述 策略模式(Strategy Pattern)也有叫做政策模式(Policy Pattern)的 是一种比较简单的行为型模式——定义一组算法,将每个算...

东境物语 1110

简单的图书管理系统---SpringBoot+mysql通过前后端分离实现增删查改

SpringBoot+mysql通过前后端分离实现增删查改 上篇文章介绍了如何写后端接口 SpringBoot连接MySQL获取数据写后端接口 这篇文章,我们就介绍一下怎么写前端 点击修改跳出修改界面,点击添加书籍跳出添加书籍界面 点击删除,直接删除一行数据 其他的也没什么解释了,直接上代码(看不懂的可以私聊我哟) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>

爱笑的博客 2015

策略模式 (Strategy Pattern)

策略模式 (Strategy Pattern)

sanmansan的博客 5276

HDMI接口技术解析:从基础到应用

本文深入解析HDMI接口技术,从其发展历程、物理结构到传输原理,全面剖析HDMI如何成为影音传输的主流标准。通过对比不同版本的带宽升级和实际应用案例,展示HDMI在4K/8K视频传输中的卓越性能,并分享硬件设计中的实战经验与避坑指南。

weixin_30485379的博客 371

YOLOv11 改进策略 | HWD:引入 Haar 小波变换,减少信息丢失

在卷积神经网络(CNN)中,下采样(Downsampling)是降低特征图分辨率、扩大感受野的关键操作,通常通过最大池化(MaxPool)或步长为 2 的卷积(Strided Convolution)实现。然而,这些方法在降低分辨率的同时,往往会丢失图像中的高频细节信息(如边缘、纹理)和精确的空间位置信息,这可能对后续特征提取和目标检测精度产生不利影响,尤其是对于小目标和需要精细定位的任务。

走向CTO的路上... 1791

【设计模式】策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 介绍 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 i...

weixin_33995481的博客 370

最新版IAR9.40和注册工具

IAR最新版的IDE在编译速度和代码提示等各个方面上都有很大提升,软件这个东西果然还是越新越好。之前的时候,IAR v9系列网上很多人都说能用,但是又没有把 IAR v9系列的注册方法写的很清楚,导致我一直都用注册老版本v8的方法去注册v9。结果注册后都会提示。

xue_nuo的博客 4万+

java策略设计模式输出字母_Java 设计模式-策略模式(Strategy Pattern)

策略模式(Strategy Pattern)属于对象行为模式。其作用是针对一组算法,将每个算法封装到具有共同接口的独立类中,从而使它们可以相互替换。策略模式的意图是将可以互换的方法封装在各自的对立类中并且让每个方法都实现一个共同的接口。策略模式(Strategy pattern)中涉及到三个角色:环境(Context)角色:持有一个Strategy类的引用的类抽象策略(Abstract Strat...

weixin_28784019的博客 619

基于MATLAB的语音声强度和响度分析及处理

综上所述,本文介绍了如何使用MATLAB进行语音信号的声强度和响度分析,并提供了相应的源代码。通过这些工具和方法,可以更好地理解和处理语音信号的声强度和响度特性,为语音信号处理和音频应用提供支持。声强度(Intensity)和响度(Loudness)是语音信号中常用的两个重要参数,用于描述声音的强度和感知响度。响度均衡化:可以通过对语音信号施加不同的加权滤波器,调整信号的频谱分布,从而改变声音的响度。除了分析语音信号的声强度和响度,MATLAB还提供了丰富的工具和函数,用于处理语音信号的声强度和响度。

COWizard的博客 617

39、高频 LLC 谐振转换控制系统动态优化算法分析与研究

本文针对高频下LLC谐振转换器动态性能差的问题,提出一种基于谐振电容器充放电估计动态切换时间的优化控制算法。通过改进状态轨迹控制方法,突破传统算法在谐振频率与开关频率相等条件下的限制,并结合新型采样策略有效抑制电压过冲。算法在MATLAB和SABER中完成仿真验证,并搭建基于STM32F407的原型系统进行测试,结果表明该方法显著缩短动态响应时间,提升系统稳定性。研究为高频、高功率密度开关电源的动态优化提供了可行解决方案。

linux6sysadmin的博客 111

对策略模式的理解

今天学习了一下策略模式。下面是我个人对策略模式的一些理解,并且尽可能的简化了理解。 1.策略模式的简单定义:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。 2.策略模式的三个角色: 策略:策略是一个接口,可以定义若干个抽象方法。具体策略:具体策略是实现策略接口的类,重写接口所定义的方法并且给出方法体的具体内容。上下文:上下文是依赖策略接口的类,即上下文包含有策

lwj734114646的专栏 1064

看GRE协议的数据封装

GRE网络数据封装流程

FanFF的博客 80

设计模式 -- 策略模式

文章目录1、编写鸭子项目,具体要求如下:2、传统方案解决鸭子问题的分析和代码实现3、传统的方式实现的问题分析和解决方案4、策略模式基本介绍5、策略模式的原理类图6、策略模式解决鸭子问题7、策略模式在 JDK-Arrays 应用的源码分析8、策略模式的注意事项和细节 1、编写鸭子项目,具体要求如下:         1)有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)   &nbsp

Syntactic Sugar 293

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

双底形态选股升级!精确筛选首次突破个股!股票量化分析工具QTYX-V2.2.8

前言通过星球会员们的反馈,双底形态识别功能非常实用、接地气,每天运行一次形态识别,从而第一时间帮助大家快速找出符合突破条件的强势股票。同时不少星友也给我反馈了一些改进需求,其中有一点非常急...

hangzhouyx的博客 814

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

形态选股!双底形态走势识别!股票量化分析工具V2.1.6

前言之前我们预先分享了Python量化识别股票双底形态的方法,目的是为了在添加到QTYX量化分析工具之前,给大家跑一下,这样可以更好地熟悉这部分功能的实现。本期我们正式把这个功能增加到工具...

hangzhouyx的博客 2457

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java设计模式之策略模式(Strategy Pattern)

一、什么是策略模式 策略模式(Strategy Pattern)是一种简单常用的设计模式,也叫做政策模式(Policy Pattern),它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 ...

qq_36697880的博客 368

设计模式(一) - 策略模式(Strategy pattern)

策略模式是什么? 策略模式定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化独立于使用算法的客户。 为什么使用策略模式? 优点: 策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地-增加新的算法或行为。策略模式提供了管理相关的算法族的办法。策略模式提供了可以替换继承关系的办法。使用策略模式可以避免使用多重条件转移

Eric Chan's blog 1391

设计模式练习(19)——策略模式

策略模式 一、题目:设计一个网上书店,该系统中所有的计算机图书(ComputerBook),每本都有10%的折扣;所有的语言类图书(LanguageBook),每本有2元的折扣;小说类图书以每100元有10元的折扣,用策略模式设计该系统 (1)绘制策略模式结构视图 (2)给出实例类图并实现代码二、所用模式结构视图: 三、实例类图:四、实例实现代码: (因为区分,所以在类的前面加了Gj19) 策略

秘密基地 7896

策略模式(策略设计模式)详解

策略模式(策略设计模式)详解 在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。 在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。...

uzong 9948

算法的封装与切换——策略模式

作者:刘伟 http://blog.youkuaiyun.com/lovelion 俗话说:条条大路通罗马。在很多情况下,实现某个目标的途径不止一条,例如我们在外出旅游时可以选择多种不同的出行方式,如骑自行车、坐汽车、坐火车或者坐飞机,可根据实际情况(目的地、旅游预算、旅游时间等)来选择一种最适合的出行方式。在制订旅行计划时,如果目的地较远、时间不多,但不差钱,可以选择坐飞机去旅游;如果

tnt32的专栏 2427

【设计模式】行为型02模板方法模式(Template Method Patten)

    五一长假,没有出去,不喜欢嘈杂的人群,玩了会游戏发泄了下憋在心底的戾气,手旁大马克杯里是母亲泡的绿茶。点开自己的播放列表,耳机里传来的是理查德克莱德曼的致爱丽丝。自己是个凡人,卑微渺小的活着。不说废话了,搞起:    模板方法模式是一种行为型模式,原理比较简单,就是对多态的一种应用,自己也在无意识中使用过很多次,看书时才意识到这种方式被总结为设计模式。    首先说说我自己的理解:模板方法...

the_fool_的博客 942

【设计模式】【一】创建型模式总结

前文提到,设计模式大致分为创建型、结构型、以及行为型三个大类。 而创建型模式、多为更合理的创建对象而设计,由于J2EE中对象的创建多为Spring管理,所以实际开发中使用的并不多。当然不包括造轮子的大牛们。 于此,简单总结了创建型模式的应用场景以及简单示例,欢迎指点: 一、单例模式 简介:顾名思义,单例模式(singleton pattern)保证一...

the_fool_的博客 871

【设计模式】【总】设计模式分类与原则概括

简要设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。总体来说设计模式分为三大类:分类创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模...

the_fool_的博客 828
上一篇: 【前端工具】页面加载获取url param
下一篇: 汇编入门一 简要
「已注销」
博客等级 码龄11年 199粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值