设计模式:策略模式

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

策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时根据不同的情况选择不同的算法或行为。策略模式通过将算法封装成独立的策略类,使得它们可以互相替换,而不影响客户端的使用。

组件

在策略模式中,有三个核心组件:

  1. 策略接口(Strategy Interface):定义了策略类的公共方法,客户端通过该接口与具体策略类进行交互。
  2. 具体策略类(Concrete Strategy):实现了策略接口,封装了具体的算法或行为。
  3. 上下文(Context):持有一个策略对象的引用,用于调用具体策略类的方法。上下文可以根据需要动态地切换不同的策略。

代码示例

interface Strategy {
    void doOperation();
}
 // 具体策略类A
class ConcreteStrategyA implements Strategy {
    public void doOperation() {
        System.out.println("执行策略A的操作");
    }
}
 // 具体策略类B
class ConcreteStrategyB implements Strategy {
    public void doOperation() {
        System.out.println("执行策略B的操作");
    }
}
 // 上下文类
class Context {
    private Strategy strategy;
     public Context(Strategy strategy) {
        this.strategy = strategy;
    }
     public void executeOperation() {
        strategy.doOperation();
    }
}
 // 客户端代码
public class Main {
    public static void main(String[] args) {
        Strategy strategyA = new ConcreteStrategyA();
        Context contextA = new Context(strategyA);
        contextA.executeOperation();
         Strategy strategyB = new ConcreteStrategyB();
        Context contextB = new Context(strategyB);
        contextB.executeOperation();
    }
}

在上述示例中,我们定义了一个策略接口(Strategy),具体策略类A(ConcreteStrategyA)和具体策略类B(ConcreteStrategyB)实现了该接口。上下文类(Context)持有一个策略对象的引用,并通过调用策略对象的方法来执行具体的操作。

在客户端代码中,我们实例化了具体的策略对象,并将其传递给上下文对象。通过调用上下文对象的executeOperation()方法,可以根据传入的策略对象执行相应的操作。

这个示例展示了如何使用Java实现策略模式,通过封装不同的策略类,使得客户端可以在运行时选择合适的策略进行操作。

源码中应用

在源码中,策略模式有许多应用。以下是一些常见的源码中使用策略模式的情况:

  1. Java中的Comparator接口:Java中的Comparator接口就是策略模式的一个典型应用。通过实现Comparator接口,可以定义不同的比较策略,并在需要时将其传递给排序算法进行对象排序。
  2. Spring框架中的策略模式:Spring框架中有许多地方使用了策略模式,例如在处理请求时,可以根据请求的类型选择不同的处理策略。
  3. Android开发中的OnClickListener接口:在Android开发中,通过实现OnClickListener接口,可以定义不同的点击事件处理策略,并将其应用于不同的UI组件。
  4. 算法实现中的策略模式:在许多算法实现中,可以使用策略模式来定义不同的算法策略,并在运行时选择合适的策略进行处理。
    这些是策略模式在源码中的一些常见应用。策略模式允许根据不同的情况选择不同的策略进行处理,提高了代码的灵活性和可维护性。

优缺点

优点:

  1. 策略模式实现了开闭原则:通过定义不同的策略类,可以在不修改原有代码的情况下新增、替换或调整策略,提高了系统的灵活性和可扩展性。
  2. 策略模式将算法的实现与使用分离:将算法封装在不同的策略类中,使得算法的变化独立于客户端的使用,降低了代码的耦合度。
  3. 策略模式可以提高代码的复用性:不同的策略可以被多个客户端共享使用,避免了代码的重复实现。
  4. 策略模式可以方便地切换和测试不同的策略:通过修改客户端代码中的策略对象,可以轻松切换不同的策略,并且对每个策略进行单独的测试和验证。
    缺点:
  5. 客户端需要了解不同的策略类:客户端需要明确知道有哪些可用的策略,并选择合适的策略进行使用,增加了客户端的复杂度。
  6. 策略模式增加了类的数量:引入策略模式会增加策略类的数量,如果策略较多,可能会导致类的膨胀,增加了系统的复杂性。

总结

策略模式通过将算法封装在不同的策略类中,实现了算法的独立变化和灵活组合。它提供了一种优雅的方式来处理多种算法或行为的选择,并具有开闭原则、灵活性和可维护性等优点。然而,策略模式也需要权衡其优缺点,确保在合适的场景下使用。文章来源地址https://www.toymoban.com/news/detail-732579.html

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

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

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

相关文章

  • Java设计模式——策略

    前言 策略模式是平时Java开发中常用的一种,虽然已有很多讲解设计模式的文章,但是这里还是写篇文章来从自己理解的角度讲解一下。 我们不妨进行场景假设,要对我们的软件进行授权管理:在启动我们的软件之前先要校验是否存在合法的授权,如果授权不合法则要求用户

    2024年02月20日
    浏览(28)
  • Java设计模式之策略(Strategy)模式

    策略(Strategy)设计模式定义了一系列算法,将它们封装起来,并且可以相互替换使用,从而使得算法可以独立于使用它的客户而变化。 策略(Strategy)设计模式是一种行为型设计模式,它允许在运行时动态地选择算法。策略模式将算法封装为算法族,从而可以在运行时根据

    2024年02月15日
    浏览(32)
  • Java设计模式—策略模式(Strategy Mode)

    目录 前言 一、策略模式的简介 二、策略模式的概念 三、策略模式的作用 四、策略模式的优、缺点 策略模式的优点: 策略模式的缺点: 五、策略模式应用场景 六、代码案例 1)抽象接口类 2)具体的策略类:减 3)具体策略类:打折 4)上下文类 5)客户端Main代码测试 总结

    2024年02月08日
    浏览(31)
  • Java设计模式-策略模式-基于Spring实现

    策略模式是一种行为设计模式,它允许在运行时选择算法的行为。它将算法封装在 独立的策略类 中,使得它们可以相互替换,而不影响客户端代码。这种模式通过 将算法的选择从客户端代码中分离出来 ,提供了更大的灵活性和可维护性。 在Java中,策略模式的设计理念可以

    2024年02月08日
    浏览(45)
  • Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式

            在平时的开发中,涉及到设计模式的有两块内容,第一个是我们 平时使用的框架 (比如spring、mybatis等),第二个是我们自己开发业务使用的设计模式。         面试官一般比较关心的是你在开发过程中, 有没有使用过设计模式,或者你在简历上写了关于设计

    2024年02月10日
    浏览(39)
  • 【策略设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    策略模式(Strategy Pattern)属于行为型设计模式。将每一个算法封装到具有共同接口的独立类中,根据需要来绑定策略,使得具体实现和策略解耦。 当你想使用对象中各种不同的算法变体,使用if...else 所带来的复杂和难以维护,可使用策略模式。或者当有许多相同类,它们仅

    2024年02月01日
    浏览(25)
  • 《Java设计模式学习》模版模式

    在这里,包括在很多的书中,我们都会看到设计模式的Demo都很简单。但是我们在实际开发过程中,却往往很少用到类似的设计模式。 但是大家在看到这篇文章的时候,希望大家可以动手敲一下。也许在敲击的过程中,你能获取到一定的灵感,在未来的工作中能够有所帮助。

    2024年02月08日
    浏览(29)
  • Java学习——设计模式——结构型模式2

    结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能,但结构型模式不仅仅简单地使用继承,而更多地通过组合与运行期的动态组合来实现更灵活的功能。 包括: 1、适配器 2、桥接 3、组合 4、装

    2024年02月03日
    浏览(33)
  • [设计模式]行为型模式-策略模式

    策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,且算法的变换不会影响使用算法的客户。 在项目开发中,我们经常要根据不同的场景,采取不同的措施,也就是不同的策略。假设我们需要对a、b这两个整数进行计算,根据条件的不同,需要执行不

    2024年02月19日
    浏览(29)
  • 设计模式-策略模式

    策略模式是一种行为型设计模式,它允许在运行时动态改变对象的行为。在策略模式中,算法被封装在独立的策略类中,使得它们可以互换使用。下面是一个简单的例子: 假设我们有一个计算税收的系统,现在需要计算不同类型的商品的税收,例如书籍、食品和服装。每种商

    2024年02月15日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包