Mẫu thiết kế - Mẫu chiến lược

Trong mẫu Chiến lược, một hành vi của lớp hoặc thuật toán của nó có thể được thay đổi tại thời điểm chạy. Loại mẫu thiết kế này nằm dưới mẫu hành vi.

Trong mẫu Chiến lược, chúng tôi tạo các đối tượng đại diện cho các chiến lược khác nhau và một đối tượng ngữ cảnh có hành vi thay đổi tùy theo đối tượng chiến lược của nó. Đối tượng chiến lược thay đổi thuật toán thực thi của đối tượng ngữ cảnh.

Thực hiện

Chúng tôi sẽ tạo giao diện Chiến lược xác định một hành động và các lớp chiến lược cụ thể thực hiện giao diện Chiến lược . Ngữ cảnh là một lớp sử dụng Chiến lược.

StrategyPatternDemo , lớp demo của chúng tôi, sẽ sử dụng các đối tượng Ngữ cảnh và chiến lược để thể hiện sự thay đổi trong hành vi của Ngữ cảnh dựa trên chiến lược mà nó triển khai hoặc sử dụng.

Bước 1

Tạo giao diện.

Strategy.java

public interface Strategy {
   public int doOperation(int num1, int num2);
}

Bước 2

Tạo các lớp cụ thể triển khai cùng một giao diện.

OperationAdd.java

public class OperationAdd implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 + num2;
   }
}

OperationSubstract.java

public class OperationSubstract implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 - num2;
   }
}

OperationMultiply.java

public class OperationMultiply implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 * num2;
   }
}

Bước 3

Tạo lớp ngữ cảnh .

Context.java

public class Context {
   private Strategy strategy;

   public Context(Strategy strategy){
      this.strategy = strategy;
   }

   public int executeStrategy(int num1, int num2){
      return strategy.doOperation(num1, num2);
   }
}

Bước 4

Sử dụng Ngữ cảnh để xem sự thay đổi trong hành vi khi nó thay đổi Chiến lược .

StrategyPatternDemo.java

public class StrategyPatternDemo {
   public static void main(String[] args) {
      Context context = new Context(new OperationAdd());		
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationSubstract());		
      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationMultiply());		
      System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
   }
}

Bước 5

Xác minh kết quả đầu ra.

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50