登录
首页 >  文章 >  java教程

Java设计模式之策略模式的深入探究

时间:2024-05-09 18:31:29 155浏览 收藏

哈喽!今天心血来潮给大家带来了《Java设计模式之策略模式的深入探究》,想必大家应该对文章都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习文章,千万别错过这篇文章~希望能帮助到你!

策略模式是一种设计模式,通过允许算法或行为独立于客户端对象而变化,从而实现算法或行为的动态改变。这种模式由 Context(上下文)、Strategy(策略)和 ConcreteStrategy(具体策略)等角色组成。在实战案例中,它可以帮助我们创建使用不同算法计算学生成绩的应用程序。策略模式的优点包括灵活性、解耦、可扩展性和可重用性。它适用于系统有多种执行任务方式、算法或行为需要在运行时动态改变以及需要避免客户端代码与算法或行为具体实现产生耦合的情况。

Java设计模式之策略模式的深入探究

Java 设计模式之策略模式的深入探究

概述

策略模式是一种设计模式,它允许算法或行为独立于客户端对象而变化,从而使算法或行为可以在运行时互换。这种模式提供了灵活性,允许在不修改客户端代码的情况下动态改变应用程序的行为。

结构

策略模式通常由以下角色组成:

  • Context(上下文):持有策略的引用并调用其执行方法。
  • Strategy(策略):定义算法或行为的接口。
  • ConcreteStrategy(具体策略):实现 Strategy 接口的具体算法或行为。

实战案例

考虑一个使用不同的算法来计算学生成绩的应用程序。我们可以使用策略模式来实现这种功能:

// Context (上下文)
public class StudentGradingContext {
    private GradingStrategy strategy;

    public StudentGradingContext(GradingStrategy strategy) {
        this.strategy = strategy;
    }

    public double calculateGrade(double score) {
        return strategy.calculateGrade(score);
    }
}

// Strategy (策略)
public interface GradingStrategy {
    double calculateGrade(double score);
}

// ConcreteStrategy (具体策略)
public class SimpleGradingStrategy implements GradingStrategy {
    @Override
    public double calculateGrade(double score) {
        return score;
    }
}

// ConcreteStrategy (具体策略)
public class WeightedGradingStrategy implements GradingStrategy {
    private double weight;

    public WeightedGradingStrategy(double weight) {
        this.weight = weight;
    }

    @Override
    public double calculateGrade(double score) {
        return score * weight;
    }
}

// Client (客户端)
public class Client {
    public static void main(String[] args) {
        StudentGradingContext context = new StudentGradingContext(new SimpleGradingStrategy());
        double grade = context.calculateGrade(85.0);
        System.out.println("Grade: " + grade);

        context = new StudentGradingContext(new WeightedGradingStrategy(0.8));
        grade = context.calculateGrade(90.0);
        System.out.println("Weighted Grade: " + grade);
    }
}

输出:

Grade: 85.0
Weighted Grade: 72.0

优点

  • 灵活性:允许动态改变算法或行为,而无需修改客户端代码。
  • 解耦:将算法或行为与使用它们的客户端解耦。
  • 可扩展性:易于添加新算法或行为,只需创建新的具体策略类即可。
  • 可重用性:相同算法或行为可用于多个客户端。

使用场景:

  • 当一个系统有多种执行任务的方式时。
  • 当算法或行为必须在运行时动态改变时。
  • 当需要避免客户端代码与算法或行为的具体实现产生耦合时。

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>