首页 > 其他分享 >策略设计模式

策略设计模式

时间:2024-10-29 19:44:01浏览次数:3  
标签:上下文 策略 int 模式 算法 设计模式

设计模式 - 策略设计模式

策略设计模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。这种模式让算法独立于使用它的客户端。简而言之,策略模式允许在运行时更改算法的行为。

策略模式的组成部分:

  1. Context(上下文):
    • 上下文指的是客户端程序,它使用某种策略。上下文通常包含对一个策略对象的引用。
  2. Strategy(策略接口)
    • 这是一个接口或抽象类,定义了所有支持的算法的公共接口。这是策略类必须要实现的接口。
  3. Concrete Strategies(具体策略):
    • 具体策略实现了策略接口,并提供了具体的算法实现。

策略模式的工作原理

在策略模式中,策略上下文将请求对象委托给一个具体的策略对象,而这个策略对象是在运行时动态选择的,上下文并不知道具体使用的是哪一个具体策略,因此可以灵活的切换算法,而不需要修改上下文以及客户端的代码。

使用场景

  • 多种算法互换:当存在多种算法时,但是这些算法相互之间没有依赖关系时,可以使用策略模式。
  • 算法的频繁更改:当算法需要频繁更改时,使用策略模式可以避免代码重复。
  • 非侵入性扩展:当希望在不修改原有代码的基础上扩展新功能时,策略模式可以实现这种扩展。
  • 条件语句的消除:如果发现代码中有很多类似“if...else”或“switch...case”的条件选择语句,那么可以考虑使用策略模式来将算法抽象化。

示例代码

下面举一个简单的示例来演示一下策略设计模式

// 策略设计模式
public class StrategyPattern {
    public static void main(String[] args) {
        CalculateContext context = new CalculateContext(new AddOperation());
        System.out.println(context.calculate(12, 24));

        context = new CalculateContext(new SubOperation());
        System.out.println(context.calculate(12, 24));
    }
}

// 策略接口(计算策略接口)
interface CalculateStrategy {
    int doOperation(int a, int b);
}

// 策略上下文
class CalculateContext {
    private CalculateStrategy calculateStrategy;

    public CalculateContext(CalculateStrategy calculateStrategy) {
        this.calculateStrategy = calculateStrategy;
    }

    // 执行策略中的方法
    public int calculate(int a, int b) {
        return calculateStrategy.doOperation(a, b);
    }
}

// 具体的策略实现类(加法)
class AddOperation implements CalculateStrategy {

    @Override
    public int doOperation(int a, int b) {
        return a + b;
    }
}

// 具体的策略实现类(减法)
class SubOperation implements CalculateStrategy{

    @Override
    public int doOperation(int a, int b) {
        return a - b;
    }
}

运行结果如下:

36
-12

策略模式的优点:

  1. 灵活性高:策略模式允许在运行时动态地选择算法。这意味着可以根据不同的条件选择不同的行为,增强了系统的灵活性。

  2. 易于扩展:新增一个算法非常容易,只需要新增一个具体策略类即可,而不需要修改已有的代码。这符合开闭原则(Open/Closed Principle),即对扩展开放,对修改关闭。

  3. 减少选择条件语句:使用策略模式可以消除条件选择语句,如 if...else 或者 switch...case,从而使代码更清晰、更易于理解。

  4. 更好的封装:每个算法都被封装在一个策略类中,算法的实现细节对客户端来说是透明的。这样可以防止客户端直接修改算法的实现。

  5. 解耦:策略模式将算法的使用从算法的实现中分离出来,降低了上下文与具体算法之间的耦合度。

策略模式的优点:

  1. 类的数量增加:每一个新的算法都需要一个新的具体策略类,这会导致类的数量增加,从而增加了系统的设计和维护成本。
  2. 客户端必须要了解策略:客户端必须知道所有的策略类,并自行决定使用哪一个。如果客户端不知道如何选择合适的策略,那么策略模式的优势就会减弱。
  3. 存在过度设计的风险:在一些简单的情况下,使用策略模式可能会被认为是过度设计,特别是当只有少数几种算法并且不太可能扩展时。
  4. 对象创建开销:在某些情况下,如果策略对象的创建成本较高,频繁地创建和销毁策略对象可能会成为一个性能问题。

标签:上下文,策略,int,模式,算法,设计模式
From: https://www.cnblogs.com/lilyflower/p/18514258

相关文章

  • Spring Security 4大核心架构图与21种安全验证策略场景分析(高级篇)
    SpringSecurity是一个功能强大且高度可定制的Java安全框架,用于保护基于Spring的应用程序。它提供全面的安全服务,包括认证、授权、防止CSRF攻击、会话管理等。通过灵活的配置选项和多种认证机制,SpringSecurity帮助开发者构建安全、健壮的应用系统,支持从简单的表单......
  • C#05-设计模式学习笔记
    @目录1.设计模式的七大原则1.单一职责原则2.迪米特法则3.里氏代换原则4.依赖倒置原则5.接口隔离原则6.开闭原则7.合成复用原则8.总结2.创建型模式1.单例模式2.工厂方法模式1.简单工厂模式2.工厂模式3.抽象工厂模式4.生成器模式5.原型模式3.结构型设计模式1.适配器模式行为型设计模......
  • 前端开发设计模式——观察者模式
    目录一、定义和特点1.定义2.特点二、实现方式1.使用JavaScript实现观察者模式的基本结构2.实际应用中的实现示例三、使用场景1.事件处理2.数据绑定3.异步通信4.组件通信四、优点1.解耦和灵活性2.实时响应和数据一致性3.提高代码的可复用性五、缺......
  • hc_icrf32.dll弹窗丢失应对策略详解
    hc_icrf32.dll是一个动态链接库文件,通常与某些软件或游戏相关联。如果你在运行某个程序时遇到hc_icrf32.dll文件丢失的弹窗错误,这可能是因为该文件被意外删除、损坏或未正确安装。以下是一些详细的应对策略来解决这个问题:重新启动计算机有时候简单的重启可以解决临时性的......
  • ArkTS 应用的代码混淆策略:提升安全性与性能
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言在移动应用开发领域,代码安全性一......
  • 【顶级EI复现】基于主从博弈的售电商多元零售套餐设计与多级市场购电策略(Matlab代码实
             ......
  • 【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)
    ......
  • java设计模式,英雄联盟的例子学习结构型模式
    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。结构型模式主要关注类或对象的组合,帮助确保如果一个系统的结构发生变化,系统的其他部分不会受到影响。适配器模式主要组成部分目标接口(Target):客户端所期待的接口。源类(Adapt......
  • 如何设计好分布式数据库,这个策略很重要(GaussDB)
    ​数据库是应用和计算机的核心组成,试想,如果没有数据库,就像人的大脑没有了记忆一样,信息也得不到共享,那么,对开发者来说,如何设计一款高效易用的数据库至关重要。GaussDB是企业级分布式数据库,具备分布式强一致、有效降低容灾成本、支持PB级海量数据、智能诊断等优点,是当下炙手可热的......
  • 项目计划中的风险管理策略
    风险管理策略是在项目计划中不可或缺的部分,它确保了项目的成功实施。在项目计划中的风险管理策略主要包括风险识别、风险评估、制定风险响应计划以及风险监控和控制。特别地,在风险识别阶段,团队需要确定潜在的风险并记录下它可能发生的条件。这样,团队可以在风险发生之前进行干预,以......