전략 패턴은 클라이언트 개체와 독립적으로 변경되도록 하여 알고리즘이나 동작의 동적 변경을 가능하게 하는 디자인 패턴입니다. 이 패턴은 Context, Strategy 및 ConcreteStrategy 역할로 구성됩니다. 실제 사례에서는 다양한 알고리즘을 사용하여 학생 성적을 계산하는 애플리케이션을 만드는 데 도움이 될 수 있습니다. 전략 패턴의 장점에는 유연성, 분리, 확장성 및 재사용성이 포함됩니다. 시스템에 작업을 수행하는 여러 방법이 있고, 알고리즘이나 동작이 런타임에 동적으로 변경되어야 하고, 클라이언트 코드와 알고리즘이나 동작의 특정 구현이 결합되는 것을 피해야 하는 상황에 적합합니다.
전략 패턴은 알고리즘이나 동작이 클라이언트 개체와 독립적으로 변경되도록 허용하는 디자인 패턴입니다. 런타임에 서로 상호 작용할 수 있습니다. 이 패턴은 유연성을 제공하므로 클라이언트 코드를 수정하지 않고도 애플리케이션의 동작을 동적으로 변경할 수 있습니다.
전략 패턴은 일반적으로 다음 역할로 구성됩니다.
학생 성적을 계산하기 위해 다양한 알고리즘을 사용하는 애플리케이션을 생각해 보세요. 전략 패턴을 사용하여 이러한 종류의 기능을 달성할 수 있습니다.
// 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
사용 시나리오:
위 내용은 자바 디자인 패턴의 전략 패턴에 대한 심층 연구의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!