手写一个简单易懂的策略模式

策略模式+简单工厂+反射 策略模式: 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化。不会影响到使用算法的客户 以商店打折为例子: 商店没有做活动,那么收费就是正常收费 商店如果进行活动,那么就会有优惠方式;比如是打折,或者是满300返100等等 这些都是算法,算法本省就是一种策略,他的特点就是完成的工作相同,只是实现不同;所以策略模式就是讲这些算法封装 阅读详情

 策略模式的核心思想是将算法的定义和使用分离,把一系列算法封装成一个个独立的类,使得它们可以相互替换,从而使程序的扩展性和维护性更强。

// 定义抽象的促销策略接口
interface PromotionStrategy {
    void doPromotion();
}

// 具体的促销策略类:满减策略
class FullReducePromotion implements PromotionStrategy {
    @Override
    public void doPromotion() {
        System.out.println("进行满减促销活动,满 300 减 50。");
    }
}

// 具体的促销策略类:打折策略
class DiscountPromotion implements PromotionStrategy {
    @Override
    public void doPromotion() {
        System.out.println("进行打折促销活动,商品打 8 折。");
    }
}

// 具体的促销策略类:赠品策略
class GiveawayPromotion implements PromotionStrategy {
    @Override
    public void doPromotion() {
        System.out.println("进行赠品促销活动,购买商品赠送小礼品。");
    }
}

// 上下文类,持有具体的促销策略实例,并调用其促销方法
class ShoppingContext {
    private PromotionStrategy promotionStrategy;

    public ShoppingContext(PromotionStrategy promotionStrategy) {
        this.promotionStrategy = promotionStrategy;
    }

    public void executePromotion() {
        promotionStrategy.doPromotion();
    }
}

// 测试类
public class StrategyPatternExample {
    public static void main(String[] args) {
        // 使用满减策略进行促销
        ShoppingContext fullReduceContext = new ShoppingContext(new FullReducePromotion());
        fullReduceContext.executePromotion();

        // 使用打折策略进行促销
        ShoppingContext discountContext = new ShoppingContext(new DiscountPromotion());
        discountContext.executePromotion();

        // 使用赠品策略进行促销
        ShoppingContext giveawayContext = new ShoppingContext(new GiveawayPromotion());
        giveawayContext.executePromotion();
    }
}

java 策略模式+简单工厂模式+反射 一、场景:在实际的项目开发中,我们常常会遇到这样的问题,实现一个功能有多重方法或策略。比如商场中计算价格的方法:1、商场中没有活动,那么收费就是原价;2、商场中有活动,打8折;3、商场中有活动,满300件100;这三个中计算价格的方法就是三种策略。我们在不适用设计模式的情况下,就只能用if...else...获取switch..case..来判断使用哪一中计算方法,如下代码块:/** * 增加打折... 阅读详情

相关推荐

java策略模式简单分析

策略模式是一种定义一系列算法的方法,从概念上来看,所有的这些算法完成的都是相同的工作,只是实现不同。策略模式让算法独立于使用它的客户端而变化,即可以在不修改客户端的情况下选择使用不同的算法。// 策略接口通过本博客,我们深入学习了策略模式的定义、角色和实现,以及在Java中的应用。策略模式提供了一种简洁而灵活的方法,使得我们可以根据需要动态切换算法,提高代码的可维护性和可扩展性。如果有任何问题或建议,请随时与我们分享。下一篇博客将继续介绍更多有关Java设计模式的知识,敬请期待!

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 2万+

手写一个策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

qq_41939120的博客 409

设计模式(策略与简单工厂结合_排序)手写代码

设计模式(策略与简单工厂结合_排序)手写代码,自己博客用

虾皮一面:手写一个Strategy模式(策略模式)

策略模式是属于设计模式中的行为模式中的一种,策略模式主要解决选项过多的问题,避免大量的if else 和 switch下有太多的case。策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换策略模式让算法独立于使用它的客户而变化。策略是个形象的表述,所谓策略就是方案,日常生活中,要实现目标,有很多方案,每一个方案都被称之为一个策略。

架构师尼恩 1112

Ubuntu20.04/Debian10安装向日葵远程控制踩坑实录(附依赖问题解决方案)

本文详细介绍了在Ubuntu 20.04/Debian 10系统上安装向日葵远程控制软件的全过程,重点解决了常见的依赖问题,特别是libwebkitgtk相关错误。通过自动修复、手动修改.deb包依赖和使用兼容层三种解决方案,帮助用户顺利完成安装并优化远程控制体验。

silver的专栏 749

Spring Boot 微服务 API 网关实战:Spring Cloud Gateway 整合,搞定路由转发 + 统一认证 + 限流熔断(企业级落地)

摘要:本文详细介绍了SpringCloud Gateway在微服务架构中的核心作用与实现方案。作为API网关,它解决了服务入口分散、认证冗余、流量失控等痛点,提供路由转发、统一认证、限流熔断等能力。文章通过图书管理系统案例,演示了SpringBoot整合Gateway的全流程,包括基础路由配置、JWT全局认证、局部参数校验、Sentinel限流熔断以及Nacos动态路由等核心功能实现。特别强调了企业级落地中的关键注意事项,如路由顺序、过滤器执行顺序、HTTPS配置等。该方案能有效构建统一、安全、高效的微服务

lamehsl的专栏 1381

23种设计模式_MODE13策略模式_手写代码实现

23种设计模式_MODE13策略模式_手写代码实现

zhaoshuangjian 209

Rocfall安装包&安装教程

Rocfall 第一步:下载安装包 下载路径: 链接:https://pan.baidu.com/s/1Dzvxzv67dSPRi7f7ZT9EeA 提取码:o9pl 第二部:安装 安装包解压 选择part1进行解压 点击Setup.exe启动安装 生成Serial Number 替换启动程序 安装完毕 素材来源于网络(禁止用于商业仅用于完成毕业设计和研究使用) 谢谢! ...

cym的博客 8701

手撸设计模式之-策略模式

手撸设计模式之-策略模式模式一 、策略模式模式介绍1.1 策略模式的定义1.2 策略模式的结构1.3 策略模式UML图1.3 策略模式代码实现二、策略模式业务场景:2.1 业务场景定义2.2 业务场景描述图2.3 策略模式场景代码实现2.4 策略模式优点2.5 策略模式缺点三、总结 一 、策略模式模式介绍 1.1 策略模式的定义 定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。可以实现委派给不同的对象对这些算法进行管理。 举个场景:在我们日常出行

以梦为马,不负韶华 514

C# 实现文件和字符串的AES加密解密

C# 实现文件和字符串的AES128加密解密

m0_72044573的博客 5935

使用CLion在Window端进行linux开发

        以往不管是开发x86端linux程序还是arm端linux程序,都是使用Source Insight作为源码编辑工具的,如下图      去年底,发现CLion的2018.3更新版本,可以支持remote host开发了,大爱!     我是基于以下几点原因,将开发工具换成CLion 1. 语法高亮较明显、跳转、重构方便(我很看重这个); 2. 可以使用图形界面进行调...

alist的笔记专栏 1万+

【手写源码-设计模式22】-策略模式-基于互联网电商购物车支付

1:主题拆解 ①基本介绍 ②互联网电商购物车支付 ③策略模式的优缺点 ④适用场景 2:基本介绍 策略模式:定义一系列算法类,将每一个算法封装起来,并让他们可以相互替换。 每一个封装的算法可以被称之为一种策略,为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类作为规则的定义,每种具体算法对应于一个具体策略类。 策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开,将算法的定义放在专门的策略类中,每一个策略类封装...

chongfa2008的博客 343

团结引擎+OpenHarmony 2实战篇:从零构建鸿蒙应用开发环境

本文详细介绍了如何从零开始构建鸿蒙应用开发环境,重点讲解了团结引擎与OpenHarmony 2的实战配置步骤。内容包括DevEco Studio安装、OpenHarmony SDK配置、团结引擎集成及项目创建等关键环节,帮助开发者快速搭建高效的开发环境,提升鸿蒙应用开发效率。

weixin_29294395的博客 264

原来使用 Spring 实现策略模式可以这么简单!

策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,可以替代代码中大量的 if-else。比如我们生活中的场景:买东西结账可以使用微信支付、支付宝...

武培轩 8462

BQ25798双电源输入4节电池升降压充电与最大功率跟踪于光伏板应用

介绍一颗具有窄范围直流电压NVDC、路径管理PPMT、光伏板最大功率跟踪及反向放电OTG升降压充电控制器,带I2C接口能对内部寄存器做控制

linkedin_38804946的博客 1676

Linux ARM平台开发系列讲解(摄像头V4L2子系统) 2.12.5 V4L2 control的原理和实现

既然涉及到视频输入,就会有很多与 相关的效果,比如对比度、饱和度、色温、白平衡等等,这些都是通用的、必须的控制项,并且大多数仅需要设置一个整数值即可。 内核中已经为我们提供了这个控制类型的,我们只需要明确自己需要添加什么控制类型,然后将其添加进内核中即可。该部分摄像头代码一半厂家会提供驱动或者相对应的参数,否则没有图像处理知识很难开发出来。 返回总目录...

DSMGUOGUO的博客 1435

简单易懂23种设计模式——策略模式【含C++代码实例】

23种设计模式C++实现——策略模式    在做面向对象的软件开发时我们往往想达到更高的代码可复用性和更合理的软件颗粒度。   根据《设计模式——可复用面向对象软件的基础》所说:“你必须找到相关的对象,以适当的颗粒度将他们回归类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。”12   内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以前使用的解决方案。这些重复的模式方案解决特定的问题,使得面向对象的设计

机器人梦想家 Bing Lee 2816

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

策略模式及与简单工厂模式的结合

策略模式: 1.策略模式动机:完成一项任务有多种不同的方式,每一种方式称为一种策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。 在软件开发中常常遇到这种情况:实现某一功能有多种途径,此时可以使用一种设计模式来使系统可以灵活的选择解决途径,也能够方便的增加新的 解决途径。 2.策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用   上例中的人出

Code is to be happy 3723

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java设计模式—策略模式,简单易懂

某些类具有相同的行为或相似的算法实现,把它们更加抽象化的管理。能在运行时动态的选择相应的行为活动进行更改。他的重心不是在算法怎么实现而是管理,如何组织、调用这些算法,从而让程序结构更加灵活。这就是策略模式,属于设计模式中的行为型模式。

关注我~分享更多技术干货 649

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

策略模式与简单工厂模式结合

大话设计模式-策略模式与简单工厂模式的融合

x1027105273的博客 1695

简单工厂与策略模式的结合

简单工厂与策略模式的结合           下面我门通过一个厂商收银软件的编码学习一下简单工厂与策略模式相结合的应用。         场景:做个商场收银软件,营业员根据所购买的商品的单价和数量,向客户收费,计费方式分为三种:正常收费、打8折、满300返100。     (1)商场促销的简单工厂         根据面向对象的编程思想——抽象,分析得出:正常收费、打几折、满*

刘海燕 廊坊师范学院信息技术提高班 第八期 1376

简单工厂与策略模式的区别

简单工厂模式和策略模式的区别与结合 简单工厂模式和策略模式是大部分程序员,在学习设计模式时接触得最早,或在工作实践中也是用得相对比较多的两个设计模式。 一个是创建型,另一个是行为型,然而两种不同类型的模式,在某些地方也有一丝的相似之处,同时在某种场景下结合使用,能起到特别好的效果。 简单工厂模式是创建型模式,创建型模式顾名思义,也就是说在创建对象的时候,遇到了瓶颈才会选择的设计模式。那么该什么情况使用呢。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建并且返回哪一个产品类(这些产品类继

sssec的博客 412

设计模式--策略模式(由简单工厂到策略模式到两者结合图文详解+总结提升)

由简单工厂到策略模式到两者结合图文详解,重点在最后的总结提升,精彩不容错过

李赛男 1941

简单工厂模式与策略模式

在现实开发中,遇到中途改需求,加功能的事情屡见不鲜.但面对已完成的程序代码,却是需要几乎重头来过的尴尬,这实在是痛苦不堪。说白了,原因就是因为我们原先所写的程序,不容易维护,灵活性差,不容易扩展,更谈不上复用,因此面对需求变化,加班加点,对程序动大手术的那种无奈也就成了非常正常的事了。所以在开发中要运用面向对象的分析设计编程思想,开始考虑通过封装、继承、多态把程序的耦合度降低,不把程序所有逻辑写在一起,尽量业务逻辑分离开,避免改动一小点东西,需要造成大量代码重新编译。这就需要使用设计模式使得程序更加的灵活,

summer的博客 1933

大话设计模式-策略模式与简单工厂模式

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 例如: CashNormal、CashRebate、CashReturn三种算法(正常收费、打折收费、返利收费),都继承CashSuper。如果还有

吴零敏 2721

简单工厂模式和策略模式的比较

代码结构图的区别 首先来看一下简单工厂模式: 再看一下策略模式: 看完他们的结构图,是不是有种很相似的感觉?唯一不同的就是 简单工厂类 和 Context类。接下来再看一下代码上有什么区别。 简单工厂类和Context类中代码的区别 简单工厂类: public class OperationFactory { public static Operation Crea...

张伟杰 1万+
上一篇: 静态代理和动态代理的区别
下一篇: 手写单例模式
java烤冷面
博客等级 码龄4年 177粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值