首页 > 其他分享 >设计模式之策略模式

设计模式之策略模式

时间:2024-06-13 10:58:22浏览次数:23  
标签:策略 角色 折扣 模式 算法 会员 设计模式

设计模式中的策略模式及其应用

一、策略模式概述

策略模式是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。简而言之,策略模式允许在运行时根据需要选择不同的算法行为。

二、策略模式的结构

策略模式通常包括三个主要角色:

  1. 抽象策略(Strategy)角色:定义了一个公共接口,以约束一系列的具体策略类。此接口是策略模式的核心。
  2. 具体策略(ConcreteStrategy)角色:实现了抽象策略接口,封装了具体的算法或行为。
  3. 环境(Context)角色:持有一个Strategy对象的引用,并负责调用由Strategy对象定义的算法。

三、策略模式的优点

  1. 算法可以自由切换:由于策略类实现自同一个接口,所以使得它们之间可以自由切换。
  2. 易于扩展:增加一个新的具体策略只需要实现接口即可,符合开闭原则。
  3. 避免使用多重条件语句:使用多重条件语句会导致代码臃肿、难以维护和扩展。策略模式可以解决在多种算法相似的情况下,避免使用if-else或switch...case带来的复杂性和臃肿性。
  4. 提高算法的保密性和安全性:客户端只知道使用了哪些算法,而不知道具体实现细节。

四、策略模式的应用场景

  1. 计费系统:对于不同用户类型和消费金额采用不同的计费方式。
  2. 游戏开发中的角色技能系统:不同角色拥有不同技能,在游戏中可以根据角色选择相应技能进行攻击或防御。
  3. 商城促销活动:根据不同促销活动采取不同的优惠方式,如打折、满减等。
  4. 策略模式与工厂方法模式结合使用,可以实现动态创建策略对象,提高代码的灵活性和可扩展性。

五、实例分析

假设有一个电商网站,需要根据用户的购买记录和会员等级进行折扣计算。会员等级分为普通会员、银卡会员、金卡会员和钻石会员,不同等级享受不同的折扣。

在这个例子中,我们可以定义一个抽象策略角色(如DiscountStrategy),它有一个计算折扣的方法(如calculateDiscount)。然后,我们可以为每一种会员等级创建一个具体的策略类(如NormalMemberDiscountStrategy、SilverMemberDiscountStrategy等),这些类实现了DiscountStrategy接口,并提供了各自的折扣计算方法。最后,我们可以在环境角色(如ShoppingCart)中持有一个DiscountStrategy对象的引用,并根据用户的会员等级动态地选择不同的具体策略对象来计算折扣。

通过这种方法,我们可以轻松地扩展新的会员等级和折扣策略,而不需要修改原有的代码结构。同时,我们也避免了在购物车类中使用大量的if-else语句来判断用户的会员等级和计算折扣,提高了代码的可读性和可维护性。

后续会持续更新分享相关内容,记得关注哦!

标签:策略,角色,折扣,模式,算法,会员,设计模式
From: https://blog.csdn.net/AOMGyz/article/details/139648575

相关文章

  • 动态选择4种库存更新策略+缓存预热+多级存储结构——应对高并发秒杀情景和其他多种情
    商城整体功能架构图文字分析:活动入口进行风控检测,这个使用独立的服务来实现,风控使用批量提交的形式来实现,直接运用Java线程池来实现,可以提交一个列表来实现批量,可以参考以下的代码创建批量请求并且进行提交:importjava.util.ArrayList;importjava.util.List;publi......
  • 在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制)
    1.在Wed中应用MyBatis(同时使用MVC架构模式,以及ThreadLocal事务控制)@目录1.在Wed中应用MyBatis(同时使用MVC架构模式,以及ThreadLocal事务控制)2.实现步骤:1.第一步:环境搭建2.第二步:前端页面index.html3.第三步:创建pojo包、service包、dao包、web包、utils包,exceptions......
  • 精细化运营-银行存量客户管理的关键策略与挑战【文末送书】
    银行存量客户运营在现代金融行业中,银行面临着激烈的竞争和不断变化的市场环境。为了在这种环境中立于不败之地,银行不仅需要吸引新客户,更需要有效地运营存量客户。银行存量客户运营指的是通过各种策略和手段,提高现有客户的满意度和忠诚度,进而增加客户的终身价值。本文将探讨......
  • 【设计模式】创建型设计模式之工厂模式(简单工厂、工厂方法、抽象工厂、go简单实例)
    一般情况下,工厂模式分为三种更为细分的类型:简单工厂、工厂方法和抽象工厂。其中,前两者的方法原理比较简单,在实际的项目里也比较常用;而抽象工厂的原理稍微复杂,在实际的项目中相对也不常用。所以,我们今天重点是前两种工厂模式,简单工厂在下面这段代码里,我们根据配置文件的后......
  • PasteSpider的集群组件PasteCluster(让你的项目快速支持集群模式)的思路及实现(含源码
    PasteSpider是什么?一款使用.net编写的开源的Linux容器部署助手,支持一键发布,平滑升级,自动伸缩,Key-Value配置,项目网关,环境隔离,运行报表,差量升级,私有仓库,集群部署,版本管理等!30分钟上手,让开发也可以很容易的学会在linux上部署你得项目![从需求角度介绍PasteSpider(K8S平替部署......
  • 【redis】使用redis benchmark评估哨兵模式主节点性能
    一、场景   验证redis哨兵模式主节点性能 二、工具Redis benchmark官网Redisbenchmark|Docs 三、命令介绍 四、使用redis-benchmark-h192.168.3.190-p26380-a123456-n100000-c20======PING_INLINE======100000requestscompletedin1.4......
  • 深入理解java设计模式之单例模式
    这里写目录标题概述单例模式是什么单例模式的使用场景单例模式的优缺点单例模式的几种实现方式饿汉式懒汉式双重检查锁定机制静态内部类枚举使用容器几种可能破坏单例类的方法多线程环境下的竞争条件使用反射机制使用序列化多个类加载器......
  • 数据库修复:重要步骤和策略
    mysql 数据库修复ibdmysql数据库表修复在数据库管理中,数据安全性和完整性是至关重要的。然而,由于各种原因,数据库可能会遭受损害,导致数据丢失或无法访问。在这些情况下,数据库修复成为一项关键任务。本文将重点介绍mysql数据库修复ibdmysql数据库表修复的相关内容。一、什么......
  • HXJ8002F 3W带关断模式AB类音频功放集成电路芯片IC
    一般描述    HXJ8002F是一颗带关断模式的音频功放IC。在5V输入电压下工作时,负载(4Ω)上的平均功率为3W,且失真度不超过10%。而对于手提设备而言,当VDD作用于关断端时,HXJ8002F将会进入模戚,此时的功耗极低。    HXJ8002F的应用电路简单,只需极少数外围器件HXJ8002......
  • 元灵诀 逆天纪系统搭建 零撸看广告升级模式 定制开发
    在当今互联网飞速发展的时代,元灵诀逆天纪系统的出现无疑为游戏行业注入了新的活力。这款系统不仅是一个定制开发的youxiu作品,更是对游戏产业的一次深度思考和探索。其独特的零撸看广告升级模式,将游戏体验和商业模式完美结合,开启了新的篇章。    首先,元灵诀逆天纪系统......