策略模式是一种设计模式,通过允许算法或行为独立于客户端对象而变化,从而实现算法或行为的动态改变。这种模式由 context(上下文)、strategy(策略)和 concretestrategy(具体策略)等角色组成。在实战案例中,它可以帮助我们创建使用不同算法计算学生成绩的应用程序。策略模式的优点包括灵活性、解耦、可扩展性和可重用性。它适用于系统有多种执行任务方式、算法或行为需要在运行时动态改变以及需要避免客户端代码与算法或行为具体实现产生耦合的情况。
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
优点
- 灵活性:允许动态改变算法或行为,而无需修改客户端代码。
- 解耦:将算法或行为与使用它们的客户端解耦。
- 可扩展性:易于添加新算法或行为,只需创建新的具体策略类即可。
- 可重用性:相同算法或行为可用于多个客户端。
使用场景:
- 当一个系统有多种执行任务的方式时。
- 当算法或行为必须在运行时动态改变时。
- 当需要避免客户端代码与算法或行为的具体实现产生耦合时。
以上就是Java设计模式之策略模式的深入探究的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!