策略模式

简介: 策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装到独立的类中,并让它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端,从而实现了算法的复用和扩展。

策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装到独立的类中,并让它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端,从而实现了算法的复用和扩展。

策略模式的核心思想是将算法的实现和使用分离,将算法的实现交给独立的策略类来完成,而将算法的选择和调用交给客户端来完成。客户端可以根据需要选择不同的策略类,从而达到不同的算法效果。

下面是一个简单的策略模式的Demo,假设有一个商场要对不同的VIP用户提供不同的折扣,例如普通VIP用户享受95折优惠,金牌VIP用户享受85折优惠,钻石VIP用户享受75折优惠等。

python
Copy

折扣策略接口

class DiscountStrategy:
def get_discount(self, price):
pass

普通VIP用户折扣策略类

class NormalVipDiscount(DiscountStrategy):
def get_discount(self, price):
return price * 0.95

金牌VIP用户折扣策略类

class GoldVipDiscount(DiscountStrategy):
def get_discount(self, price):
return price * 0.85

钻石VIP用户折扣策略类

class DiamondVipDiscount(DiscountStrategy):
def get_discount(self, price):
return price * 0.75

商场类

class Mall:
def init(self, discount_strategy):
self.discount_strategy = discount_strategy

def calculate_discount(self, price):
    return self.discount_strategy.get_discount(price)

客户端代码

normal_vip_discount = NormalVipDiscount()
gold_vip_discount = GoldVipDiscount()
diamond_vip_discount = DiamondVipDiscount()

mall = Mall(normal_vip_discount)
price = 100

discount_price = mall.calculate_discount(price)
print(f"普通VIP用户消费{price}元,享受95折优惠,折后价格为{discount_price}元。")

mall = Mall(gold_vip_discount)

discount_price = mall.calculate_discount(price)
print(f"金牌VIP用户消费{price}元,享受85折优惠,折后价格为{discount_price}元。")

mall = Mall(diamond_vip_discount)

discount_price = mall.calculate_discount(price)
print(f"钻石VIP用户消费{price}元,享受75折优惠,折后价格为{discount_price}元。")
这个Demo中,DiscountStrategy是折扣策略接口,定义了一个get_discount方法,用于计算折扣金额。NormalVipDiscount、GoldVipDiscount和DiamondVipDiscount是具体的折扣策略类,它们分别实现了get_discount方法,完成了不同的折扣计算逻辑。Mall是商场类,它接受一个DiscountStrategy对象作为参数,根据传入的折扣策略对象,计算出具体的折扣金额。

当客户端使用策略模式时,需要先定义一个抽象的策略接口,然后实现具体的策略类,每个策略类都封装了一种算法,用于计算具体的结果。在客户端中,需要将具体的策略对象传递给调用者,让调用者根据具体的策略对象来完成不同的算法执行。通过策略模式,可以实现算法的复用和扩展,同时也保证了算法的独立性和可维护性。

以下是一些推荐的学习资料和链接,可以帮助你更好地学习策略模式:

《Head First 设计模式》:这是一本非常通俗易懂的设计模式入门书籍,其中包含了对策略模式的讲解和示例代码。
《设计模式:可复用面向对象软件的基础》:这是设计模式的经典著作之一,其中包含了对策略模式的详细讲解和示例代码。
《图解设计模式:以UML为基础,学习23种设计模式》:这是一本以图解为主的设计模式入门书籍,其中包含了对策略模式的详细讲解和示例代码。
策略模式的Java实现:这是一个包含了策略模式示例代码的Java项目,可以帮助读者更好地理解和应用策略模式。
GitHub链接:https://github.com/iluwatar/java-design-patterns/tree/master/strategy
总之,学习策略模式需要结合书籍和实践,建议读者选择一些适合自己的入门书籍,同时结合实际项目中的设计问题进行实践,加深对策略模式的理解和应用。

目录
相关文章
|
安全 Unix Linux
操作系统紧急故障修复常见有效方案
操作系统是计算机系统的核心软件之一,如果操作系统出现了紧急故障,将会引起系统的宕机,严重影响业务系统的可用性。因此,对操作系统的紧急故障进行修复是必不可少的。本文将介绍操作系统紧急故障的常见有效方案。
592 1
|
存储 SQL 数据库连接
MPPDB分布式结构化数据库
1.MPPDB简介 MPP,它是一款 Shared Nothing 架构的分布式并行数据库集群,具备高性能、高可用、高扩展特性,可以为超大规模数据管理提供高性价比的通用计算平台,并广泛地用于支撑各类数据仓库系统、BI 系统和决策支持系统。
6980 0
|
NoSQL 数据挖掘 定位技术
如何让geopandas支持写出gdb文件
如何让geopandas支持写出gdb文件
326 4
|
6月前
|
IDE 开发工具 C++
JetBrains CLion 2025.1 发布 - C 和 C++ 跨平台 IDE
JetBrains CLion 2025.1 (macOS, Linux, Windows) - C 和 C++ 跨平台 IDE
233 0
|
12月前
|
传感器 人工智能 自动驾驶
未来出行:无人驾驶汽车的技术革新与挑战
本文深入探讨了无人驾驶汽车背后的技术原理,包括感知、定位、决策和执行四个核心系统。同时,文章分析了当前自动驾驶技术的发展现状,并指出了技术标准不统一、基础设施不完善和法律法规滞后等主要挑战。最后,展望了无人驾驶汽车未来的发展趋势,强调了跨学科合作和政策支持的重要性。
521 4
|
12月前
|
机器学习/深度学习 人工智能 安全
AI在灾害管理中的作用:提高防灾减灾能力
【10月更文挑战第8天】AI技术在灾害管理中的应用正在逐步改变我们对灾害的应对方式。通过发挥AI的优势,我们可以更有效地预防、减轻和应对自然灾害带来的挑战,为构建安全、弹性的社会做出更大贡献。
|
12月前
|
前端开发 算法 JavaScript
无界SaaS模式深度解析:算力算法、链接力、数据确权制度
私域电商的无界SaaS模式涉及后端开发、前端开发、数据库设计、API接口、区块链技术、支付和身份验证系统等多个技术领域。本文通过简化框架和示例代码,指导如何将核心功能转化为技术实现,涵盖用户管理、企业店铺管理、数据流量管理等关键环节。
|
12月前
【总结】单片机重点知识总结记录之Keil相对路径(四)
【总结】单片机重点知识总结记录之Keil相对路径(四)
364 0
|
安全 API Android开发
Android打开USB调试命令
【6月更文挑战第20天】
473 1
|
机器学习/深度学习 自然语言处理
Transformer奠基之作《Attention Is All You Need》
Transformer模型,由Google Brain和Google Research在2017年的论文中提出,颠覆了传统NLP依赖RNN和CNN的局面。该模型基于完全的注意力机制,解决了RNN的并行化难题,通过编码器和解码器中的多头自注意力机制捕捉全局依赖。训练策略结合Adam优化器、标签平滑和dropout,使其在机器翻译任务中表现卓越。尽管面临长序列处理的挑战和可能的上下文忽略问题,Transformer仍展示了注意力机制的巨大潜力,对NLP领域产生了深远影响。
527 3
Transformer奠基之作《Attention Is All You Need》