探索Java设计模式:策略模式

ops/2024/11/15 3:55:29/

探索Java设计模式:深入理解与实践策略模式

在软件开发中,设计模式作为一种最佳实践,旨在解决特定场景下的常见设计问题,提高代码的可复用性、可扩展性和可维护性。本文将聚焦于Java编程语言中的一个核心设计模式——策略模式,通过简要介绍、实现示例及实际运用等模块,帮助读者深入理解并有效运用这一模式。

一、简要介绍

**策略模式(Strategy Pattern)**是一种行为设计模式,它定义了一系列算法,并将每个算法封装在一个独立的类中,使得它们可以互相替换。策略模式让算法的变化独立于使用它的客户端,从而使得系统更易于扩展和维护。

策略模式的结构中,主要包含以下几个角色:

  • Context(环境类):持有一个策略对象的引用,负责调用策略对象的接口来执行相关操作。环境类与具体策略解耦,仅依赖于抽象策略接口。
  • Strategy(抽象策略类):定义了所有支持的算法的公共接口,使策略对象可以被环境类以统一的方式调用。
  • ConcreteStrategy(具体策略类):实现了抽象策略接口,每个具体策略类代表一个具体的算法实现。

二、实现示例

下面以一个简单的购物折扣计算场景为例,展示Java中策略模式的实现:

java">// 抽象策略:定义折扣计算接口
public interface DiscountStrategy {double calculateDiscount(double originalPrice);
}// 具体策略:普通会员折扣策略
public class NormalMemberDiscount implements DiscountStrategy {@Overridepublic double calculateDiscount(double originalPrice) {return originalPrice * 0.95; // 享受95折优惠}
}// 具体策略:VIP会员折扣策略
public class VIPMemberDiscount implements DiscountStrategy {@Overridepublic double calculateDiscount(double originalPrice) {return originalPrice * 0.85; // 享受85折优惠}
}// 环境类:购物车,持有折扣策略并负责调用
public class ShoppingCart {private DiscountStrategy discountStrategy;public ShoppingCart(DiscountStrategy discountStrategy) {this.discountStrategy = discountStrategy;}public double applyDiscount(double originalPrice) {return discountStrategy.calculateDiscount(originalPrice);}
}// 客户端代码:使用不同策略计算折扣价
public class Client {public static void main(String[] args) {ShoppingCart normalCart = new ShoppingCart(new NormalMemberDiscount());double normalDiscountedPrice = normalCart.applyDiscount(100.0);System.out.println("普通会员折扣价: " + normalDiscountedPrice);ShoppingCart vipCart = new ShoppingCart(new VIPMemberDiscount());double vipDiscountedPrice = vipCart.applyDiscount(100.0);System.out.println("VIP会员折扣价: " + vipDiscountedPrice);}
}

在这个示例中,DiscountStrategy接口充当抽象策略,NormalMemberDiscountVIPMemberDiscount是具体策略,实现了不同的折扣算法。ShoppingCart作为环境类,持有一个DiscountStrategy对象并在applyDiscount方法中调用其calculateDiscount方法。客户端可以根据会员类型创建不同的购物车实例,灵活应用不同的折扣策略。

三、实际运用

策略模式在实际开发中有广泛应用,以下列举几个典型场景:

1. 多种排序算法的选择

在数据排序场景中,可以定义一个SortStrategy接口,然后为快速排序、归并排序、冒泡排序等每一种算法实现一个具体策略类。排序组件(如列表视图)只需持有SortStrategy对象,即可动态切换不同的排序算法。

2. 图像处理滤镜效果

在图像处理软件中,可以定义一个ImageFilterStrategy接口,为锐化、模糊、黑白、色彩调整等滤镜效果分别实现具体策略类。图像处理引擎只需通过注入不同的策略对象,即可实现多种滤镜效果的灵活切换。

3. 支付方式选择

在电商系统中,用户可以选择不同的支付方式进行交易。可以定义一个PaymentStrategy接口,为信用卡支付、支付宝支付、微信支付等每种支付方式实现一个具体策略类。订单结算模块只需根据用户选择调用相应策略对象的支付方法,即可完成不同支付方式的处理。

4. 游戏角色技能系统

在游戏开发中,游戏角色可能拥有多种技能,每种技能有不同的施放逻辑。可以定义一个SkillStrategy接口,为每种技能实现一个具体策略类。战斗系统在处理角色行动时,根据角色选择的技能调用对应策略对象的施放方法,实现技能效果的多样化和动态切换。

总结而言,策略模式通过分离算法与使用算法的上下文,提供了灵活应对变化的能力。在Java开发中,正确运用策略模式可以帮助我们构建更加模块化、可扩展的系统,轻松应对业务需求的变更和算法的多样性。


http://www.ppmy.cn/ops/6146.html

相关文章

李沐45_SSD实现——自学笔记

主体思路: 1.生成一堆锚框 2.根据真实标签为每个锚框打标(类别、偏移、mask) 3.模型为每个锚框做一个预测(类别、偏移) 4.计算上述二者的差异损失,以更新模型weights 先读取一张图像。 它的高度和宽度分别为561和728像素。 %matplotlib inline import …

工业电脑在ESOP工作站行业应用

ESOP工作站行业应用 项目背景 E-SOP是实现作业指导书电子化,并统一管理和集中控制的一套管理信息平台。信迈科技的ESOP终端是一款体积小巧功能齐全的高性价比工业电脑,上层通过网络与MES系统连接,下层连接显示器展示作业指导书。ESOP控制终…

电视音频中应用的音频放大器

电视机声音的产生原理是将电视信号转化为声音,然后通过扬声器将声音播放出来。当我们打开电视并选择频道时,电视机首先从天线或有线电视信号中获取声音信号。声音信号经过放大器放大之后,就能够通过扬声器发出声音。电视机声音的产生原理和音…

【设计模式】组合模式

目录 什么是组合模式 代码实现 什么是组合模式 Java中的组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得客户端对单个对象和组合对象的处理具有一致性,因…

怎样把pandas.core.frame.DataFrame数据写入excel文件?

要将pandas的DataFrame数据写入Excel文件,可以使用pandas提供的to_excel方法。 首先,安装pandas库(如果尚未安装): pip install pandas然后,导入pandas库: import pandas as pd接下来&#x…

20.Unity飞机大战游戏

1任务:使背景图动起来 2任务:飞机换帧动画 3任务:让飞机发射子弹 4任务:敌机出现 5任务:控制飞机 6任务:游戏碰撞逻辑 7任务:另外两种类型的敌机 8任务:拾取奖励物品换枪 9…

Android自定义类-写字板

目录 1. 属性文件 res/values/attrs.xml 2. 自定义控件类文件 MyClipbroad.class 3. XML布局文件中的使用 4. Java文件中的使用 该写字板可设置画笔颜色、画笔宽度、画布背景,具有导出图像、清空画布功能,可与OnTouchListener配合达到触摸绘画的效果…

全国产化无风扇嵌入式车载电脑农耕车辆/钢厂天车行业应用

农耕车辆行业应用 背景介绍 当前农耕车车载电脑主要的功能,是要实现农耕车的精确的定位和导航,更加先进的系统则要实现农耕车自动驾驶,与农耕车上相关传感器的通讯(例如耕土深度的传感器, 油量存量传感器…)来实现更多的自动化、信息化的功能…