策略模式是一種設計模式,透過允許演算法或行為獨立於客戶端物件而變化,從而實現演算法或行為的動態改變。這種模式由 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
使用場景:
以上是Java設計模式之策略模式的深入探究的詳細內容。更多資訊請關注PHP中文網其他相關文章!