津津乐道设计模式

发布时间:2024-11-21 14:33

音乐喜剧中的经典台词和桥段经常被人们津津乐道。 #生活乐趣# #日常生活趣事# #音乐欣赏的乐趣# #音乐喜剧#

在这里插入图片描述

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
个人CSND主页——Micro麦可乐的博客
《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
《RabbitMQ》本专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

津津乐道设计模式 - 策略模式详解 什么是策略模式策略模式适用场景生活案例案例代码1案例代码2结语

什么是策略模式

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,将每个算法封装起来,并使它们可以相互替换,以便根据不同的情况选择不同的算法进行执行。

策略模式适用场景

算法的选择性:当程序需要根据不同的情况选择不同的算法或策略时,策略模式可以很好地应用。它允许在运行时动态地切换算法,使得系统更具灵活性和可扩展性。

多个类似行为的存在:如果一个类拥有多个类似的行为,但每个行为在实现上有所不同,那么可以使用策略模式来将这些行为封装在独立的策略类中,并使它们可以互相替换。这样可以避免使用大量的条件语句或分支逻辑,使代码更加清晰和可维护。

避免暴露复杂的条件逻辑:当存在大量复杂的条件逻辑时,使用策略模式可以将这些逻辑封装在具体的策略类中,使得主体逻辑更加简洁,易于理解和维护。

需要在运行时动态地选择算法或策略:策略模式允许在运行时根据需要动态地选择不同的算法或策略。这对于需要根据用户输入、环境变量或其他动态因素来选择合适的算法或策略的情况非常有用。

希望避免使用继承的情况:策略模式可以代替继承来实现不同行为的变化。通过使用组合而不是继承,可以更灵活地组织和管理代码。

策略模式在许多领域都有应用,包括软件开发、游戏开发、金融领域、人工智能等。它可以帮助提高代码的可维护性、灵活性和可扩展性,同时降低代码的耦合度。

生活案例

在生活场景中,我们可以通过以下例子来说明策略模式:

每每到了618、双11,你的女朋友经常会在不同的电商平台上购物。她喜欢寻找最佳的优惠策略来节省花费,因此她会根据不同的购物情况采用不同的优惠策略;

现在她要开始败家了,她上了某宝,某宝活动综合提供了20%的整体折扣优惠,并适用于所有的商品。同时发现护肤专区满减优惠满1000减250,这个时候她的CPU飞速计算:

这个包包比平时省20%买护肤品满1000就可以减250 ,变相省了25%

于是在她一通操作下,将自己想要的加入到了购物车,并毫不犹豫找到你买单结算 ;

案例代码1

上面女朋友购物案例中,我们使用JAVA代码来给大家演示一下

//定义策略接口 public interface DiscountStrategy { double applyDiscount(double price); } 1234

创建打折优惠策略

/** * 打折优惠策略 */ public class Discount implements DiscountStrategy{ private double discountPercentage; public Discount(double discountPercentage) { this.discountPercentage = discountPercentage; } @Override public double applyDiscount(double price) { return price * (1 - discountPercentage); } } 1234567891011121314

创建满减优惠策略

/** * 满减优惠策略 */ public class FullReduction implements DiscountStrategy{ //定义满减临界值 private double threshold; //定义满减金额 private double reductionAmount; public FullReduction(double threshold, double reductionAmount) { this.threshold = threshold; this.reductionAmount = reductionAmount; } @Override public double applyDiscount(double price) { if (price >= threshold) { return price - reductionAmount; } else { return price; } } } 123456789101112131415161718192021222324

定义女友类

/** * 定义女友 购物策略结算 */ public class Girlfriend { private DiscountStrategy discountStrategy; public void setDiscountStrategy(DiscountStrategy discountStrategy) { this.discountStrategy = discountStrategy; } public double checkout(double totalPrice) { System.out.println("女友CPU飞速运转"); return discountStrategy.applyDiscount(totalPrice); } } 123456789101112131415

最后测试类

public class StrategyPatternTest { public static void main(String[] args) { Girlfriend cart = new Girlfriend(); // 使用打折优惠策略 DiscountStrategy discountStrategy = new Discount(0.2); cart.setDiscountStrategy(discountStrategy); double totalPrice = 100.0; double finalPrice = cart.checkout(totalPrice); System.out.println("使用打折优惠后的价格:" + finalPrice); // 使用满减优惠策略 DiscountStrategy fullReductionStrategy = new FullReduction(200.0, 50.0); cart.setDiscountStrategy(fullReductionStrategy); totalPrice = 250.0; finalPrice = cart.checkout(totalPrice); System.out.println("使用满减优惠后的价格:" + finalPrice); } } 12345678910111213141516171819

最后输出如下:
在这里插入图片描述
这个现实生活场景中的购物案例展示了策略模式的应用。通过选择不同的购物策略,你能够根据不同商城的促销优惠来获取最佳的价格。策略模式使得购物策略的变化独立于你的购物行为,为你提供了灵活性和选择性。

案例代码2

在一个电商平台上,用户可以选择不同的支付方式来完成订单支付,比如信用卡支付、支付宝支付、微信支付等。每种支付方式都有自己的特点和实现方式。

在这种情况下,策略模式可以被应用于支付场景中。让我们看看如何使用策略模式来实现支付功能:
首先,我们定义一个支付策略接口,例如 PaymentStrategy:

public interface PaymentStrategy { void pay(double amount); } 123

然后,我们创建不同的支付策略类来实现具体的支付方式,比如 信用卡支付 CreditCardPaymentStrategy、支付宝支付 AlipayPaymentStrategy、微信支付 WeChatPaymentStrategy 等。

//信用卡支付策略 public class CreditCardPaymentStrategy implements PaymentStrategy { @Override public void pay(double amount) { // 实现信用卡支付逻辑 System.out.println("使用信用卡支付:" + amount + " 元"); } } //支付宝支付策略 public class AlipayPaymentStrategy implements PaymentStrategy { @Override public void pay(double amount) { // 实现支付宝支付逻辑 System.out.println("使用支付宝支付:" + amount + " 元"); } } //微信支付策略 public class WeChatPaymentStrategy implements PaymentStrategy { @Override public void pay(double amount) { // 实现微信支付逻辑 System.out.println("使用微信支付:" + amount + " 元"); } } 1234567891011121314151617181920212223242526

接下来,我们创建一个订单类 Order,它具有支付功能,通过设置不同的支付策略来完成支付。

public class Order { private PaymentStrategy paymentStrategy; public void setPaymentStrategy(PaymentStrategy paymentStrategy) { this.paymentStrategy = paymentStrategy; } public void processPayment(double amount) { // 调用支付策略的支付方法 paymentStrategy.pay(amount); } } 123456789101112

最后,我们可以在客户端代码中使用策略模式来完成订单支付:

public class PaymentApp { public static void main(String[] args) { Order order = new Order(); // 使用信用卡支付 PaymentStrategy creditCardPayment = new CreditCardPaymentStrategy(); order.setPaymentStrategy(creditCardPayment); order.processPayment(100.0); // 使用支付宝支付 PaymentStrategy alipayPayment = new AlipayPaymentStrategy(); order.setPaymentStrategy(alipayPayment); order.processPayment(200.0); // 使用微信支付 PaymentStrategy weChatPayment = new WeChatPaymentStrategy(); order.setPaymentStrategy(weChatPayment); order.processPayment(300.0); } } 1234567891011121314151617181920

在上述代码中,我们创建了一个订单对象 order,然后根据用户选择的支付方式设置相应的支付策略,最后调用 processPayment 方法来完成支付。

通过策略模式,用户可以根据自己的需求选择不同的支付方式,而不需要修改订单类的代码。这样可以使系统更加灵活,易于扩展和维护。

这个支付场景的例子展示了策略模式在实际应用中的使用,它将支付方式的选择和具体的支付逻辑解耦,提供了一种灵活的设计方案。

结语

本章主要带大家认识什么是策略模式,策略模式适用场景有哪些,并通过两个现实生活的场景给大家演示策略模式的使用,策略模式也是我们平时开发经常会用的模式之一,希望大家能熟练掌握~ 如果本篇文章对你有用,欢迎关注收藏评论!

样例代码:https://github.com/lhmyy521125/toher-designmode

网址:津津乐道设计模式 https://www.yuejiaxmz.com/news/view/175010

相关内容

在天津生活,真的很快乐!
天津二手家具
8月4日起天津航空增加天津=乌鲁木齐航线班次
全城打折!天津500多场活动,等你来!
天津十大家常菜 天津地方特色菜 天津人最喜欢吃的菜
天津手绘墙公司 天津手绘装饰画
引领城市生活方式再进阶,天津西青大悦汇12.30亮相打开商业新思路
缅怀心理学巨匠:菲利普·津巴多教授
十大具有天津特色的工艺品排名 10种最受欢迎的天津特产工艺品
生育津贴=产假工资?生育津贴和产假工资只能二选一?

随便看看