二十三种设计模式第十四篇--策略模式

这篇具有很好参考价值的文章主要介绍了二十三种设计模式第十四篇--策略模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

策略模式:主要围绕一个类的行为或者其算法在运行时更改,也是一种行为型模式。

在软件开发中,我们经常遇到需要根据不同的情况选择不同算法或行为的情况。传统的做法是使用大量的条件语句来实现这种逻辑,但这样的实现方式往往难以维护和扩展。策略模式(Strategy Pattern)提供了一种优雅的解决方案,可以让我们灵活地处理多种算法和行为,同时提高代码的可维护性和可扩展性。

策略模式的意义

策略模式的主要目的是将算法的定义、实现和使用相互解耦,使得它们可以独立变化。它通过将不同的算法封装在独立的策略类中,并定义一个通用的接口或抽象类来统一它们的调用方式。这样一来,客户端只需要与通用接口交互,而不需要关心具体的算法实现细节。

策略模式的核心思想是将算法视为一个可互换的组件,客户端可以在运行时动态地选择适合的策略。这种灵活性使得策略模式特别适用于需要根据不同的条件或偏好来调整算法的情况。例如,一个电商平台可以根据用户的购买历史和偏好选择不同的优惠策略来计算商品的价格。

策略模式的实现

在策略模式中,我们通常会定义一个策略接口或抽象类,用于统一不同策略的调用方式。然后,针对每种具体的算法或行为,我们创建相应的策略类,实现策略接口,并提供具体的算法实现。

客户端在需要使用算法的地方,通过策略接口与具体的策略类进行交互。客户端可以根据实际需求,在运行时动态地选择合适的策略类,并将其注入到上下文对象中。上下文对象负责调用所选策略的算法,并返回结果给客户端。

这种结构使得我们可以灵活地添加新的策略类或修改现有的策略类,而不会对客户端代码产生影响。策略模式将算法的变化对客户端透明,使得客户端只需要关注业务逻辑,而不需要关心具体的算法实现。

策略模式的优点

使用策略模式可以带来多个优点:

  1. 灵活性和可扩展性:策略模式通过将算法封装在独立的策略类中,使得可以在运行时动态地选择和切换算法,而无需修改客户端的代码。这种灵活性使得系统更容易扩展和适应变化。
  2. 可维护性:策略模式将不同的算法或行为封装在独立的策略类中,使得代码结构清晰,易于理解和维护。每个策略类负责实现一个特定的算法,修改或调试一个策略对其他策略没有影响,降低了代码的复杂性。
  3. 代码复用:策略模式可以促进代码的复用。不同的策略类可以共享相同的接口或抽象类,从而使得相似的算法可以通过继承或实现来共享代码。这样可以避免代码的重复编写,提高开发效率。

策略模式的应用场景

策略模式在以下情况下特别适用:

  1. 当需要根据不同的条件或偏好选择不同算法或行为时,可以使用策略模式来灵活地切换和调整算法。

  2. 当有多个相似的算法或行为,但它们的实现细节不同,可以将每个算法封装在独立的策略类中,以提高代码的可读性和可维护性。

  3. 当某个算法的实现经常变化,或者希望在运行时动态地选择算法时,可以使用策略模式来避免频繁修改客户端的代码。

  4. 当需要将算法的定义、实现和使用相互解耦,以提高代码的模块化和可测试性时,策略模式也是一个很好的选择。

代码实现

二十三种设计模式第十四篇--策略模式,# 设计模式,设计模式,策略模式

public interface Strategy {

   public int doOperation(int num1, int num2);

}
public class OperationAdd implements Strategy {
   @Override
   public int doOperation(int num1, int num2) {
      return num1 + num2;
   }
}
public class OperationMultiply implements Strategy {
   @Override
   public int doOperation(int num1, int num2) {
      return num1 * num2;
   }
}
public class OperationSubtract implements Strategy {
   @Override
   public int doOperation(int num1, int num2) {
      return num1 - num2;
   }
}
public class Context {
   //真实采用的策略
   private Strategy strategy;
 
   public Context(Strategy strategy){
      this.strategy = strategy;
   }
 
   public int executeStrategy(int num1, int num2){

      return strategy.doOperation(num1, num2);
   }


}
public class StrategyPatternDemo {
   public static void main(String[] args) {

      Context context = new Context(new OperationAdd());    
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
 
      context = new Context(new OperationSubtract());      
      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
 
      context = new Context(new OperationMultiply());    
      System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
   }
}

结论

策略模式是一种优秀的设计模式,它能够灵活地处理多种算法和行为,提高代码的可维护性、可扩展性和可测试性。通过将算法封装在独立的策略类中,并通过统一的接口来调用,我们可以使得算法的变化对客户端透明,从而降低了代码的耦合性。策略模式的应用可以让我们的代码更加灵活、可读和可维护,是值得推广和应用的一种设计模式。文章来源地址https://www.toymoban.com/news/detail-527941.html

到了这里,关于二十三种设计模式第十四篇--策略模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二十三种设计模式第十八篇--责任链模式

    责任链模式是一种行为型设计模式, 它允许你将请求沿着处理者链传递,直到有一个处理者能够处理该请求为止。责任链模式将请求发送者和请求处理者解耦,从而使得多个处理者都有机会处理同一个请求。 该模式包含以下几个关键角色: 抽象处理者(Handler):定义了一个

    2024年02月15日
    浏览(35)
  • 二十三种设计模式第十六篇--观察者模式

    观察者模式是一种行为型设计模式,它建立了一种对象间的一对多依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式可以实现对象间的松耦合通信,提高系统的可扩展性和灵活性。 观察者模式的核心是两个角色:主题(

    2024年02月12日
    浏览(34)
  • 二十三种设计模式:工厂模式

    工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露对象的创建逻辑。工厂模式通过使用工厂方法来解决这个问题,该方法将对象的创建委托给子类来处理。 在工厂模式中,我们定义一个抽象工厂类,它包含一个抽象的工厂方法,该方法返回一个

    2024年02月07日
    浏览(37)
  • 二十三种设计模式(待更)

    资料来源于老师讲解以及大佬的设计模式仓库 zhengqingya 将对象和类按某种布局组成更大的结构,并同时保持结构的灵活和⾼效。 1.适配器 适配器就是将原先无法直接使用的某个接口或者类通过适配器模式转换为可以使用的接口或者类。将一个类的接口转换成客户希望的另外

    2024年02月08日
    浏览(29)
  • 二十三种设计模式第二十篇--备忘录模式

    备忘录模式,备忘录模式属于行为型模式。它允许在不破坏封装的情况下捕获和恢复对象的内部状态。 保存一个对象的某个状态,以便在适当的时候恢复对象,该模式通过创建一个备忘录对象来保存原始对象的状态,并将其存储在一个负责管理备忘录的负责人对象中。 备忘

    2024年02月14日
    浏览(25)
  • 【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

    简单工厂模式代码实现如下: 📢 意图要背 工厂方法代码实现如下: 抽象工厂模式代码如下: 生成器模式代码如下: 原型模式代码实现如下: 单例模式代码如下: 桥接模式代码实现如下: 组合模式添加和删除代码实现: 装饰器模式代码实现: 外观模式代码实现: 代理模

    2024年02月07日
    浏览(36)
  • 二十三种设计模式全面解析-抽象工厂模式:创造无限可能的工厂之道

    在软件开发中,我们经常面临着创建一系列相关或相互依赖的对象的挑战。在这个过程中,我们希望能够灵活地创建对象,又不与具体的类耦合。那么有没有一种设计模式可以帮助我们实现这一目标呢?答案是肯定的!让我带你进入抽象工厂模式的世界,一起探索创造无限可

    2024年02月07日
    浏览(36)
  • 二十三种设计模式全面解析-原型模式进阶之原型管理器:集中管理对象原型的设计模式之道

    在软件开发中,我们经常需要创建和复制对象。然而,有时候直接创建对象可能会导致性能下降或代码重复。为了解决这些问题,原型模式应运而生。而使用原型管理器(Prototype Manager)来集中管理原型对象可以进一步提高灵活性和可维护性。本文将详细介绍原型管理器的用

    2024年02月07日
    浏览(37)
  • 二十三种设计模式全面解析-装饰器模式的高级应用:打造灵活可扩展的通知系统

    在现代软件开发中,通知系统是一个广泛应用的功能,用于实时向用户发送各种类型的通知,如短信、微信、邮件以及系统通知。然而,通知系统的需求通常是多变且动态的,因此需要一种灵活可扩展的设计模式来满足不同类型的通知需求。 在前面一篇文章中,我们介绍了什

    2024年02月06日
    浏览(33)
  • 二十三种设计模式全面解析-桥接模式的高级应用:构建灵活的跨平台UI框架

    在软件开发的世界中,桥接模式(Bridge Pattern)作为一种设计模式,旨在将抽象部分与实现部分分离,从而使它们可以独立地变化。这一模式的应用不仅有助于提高代码的可维护性,还在一些复杂的场景中展现出其真正的价值。 前面一篇文章中,我们介绍了什么是桥接模式?

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包