The strategy pattern is a design pattern that enables dynamic changes in algorithms or behaviors by allowing them to change independently of client objects. This pattern consists of the roles Context, Strategy, and ConcreteStrategy. In a practical case, it helps us create applications that use different algorithms to calculate student grades. The advantages of the Strategy pattern include flexibility, decoupling, scalability, and reusability. It is suitable for situations where the system has multiple ways to perform tasks, the algorithm or behavior needs to be dynamically changed at runtime, and the coupling of the client code with the specific implementation of the algorithm or behavior needs to be avoided.
The Strategy Pattern is a design pattern that allows algorithms or behaviors Varies independently of the client object, allowing algorithms or behaviors to be interchanged at runtime. This pattern provides flexibility, allowing the behavior of the application to be changed dynamically without modifying the client code.
The strategy pattern usually consists of the following roles:
Consider an application that uses different algorithms to calculate student grades. We can use the strategy pattern to achieve this functionality:
// 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); } }
Output:
Grade: 85.0 Weighted Grade: 72.0
Usage scenarios:
The above is the detailed content of An in-depth study of the Strategy Pattern in Java design patterns. For more information, please follow other related articles on the PHP Chinese website!