Strategy Pattern hiện đại: Khi Strategy chỉ là một Lambda Expression

Strategy Pattern cho phép định nghĩa một tập hợp các thuật toán, đóng gói từng thuật toán lại và giúp chúng có thể thay thế lẫn nhau dễ dàng khi runtime.

Kiến trúc tổng quan của Strategy Pattern:

Strategy Design Pattern Architecture

Legacy Strategy Pattern

Ta phải định nghĩa một interface và viết vô số concrete class cho mỗi thuật toán thanh toán hoặc lọc dữ liệu:

interface PaymentStrategy {
    void pay(int amount);
}

class CreditCardPayment implements PaymentStrategy {
    public void pay(int amount) { System.out.println("Paying via CC: " + amount); }
}

Modern Strategy Pattern với Lambdas

Bản chất của Strategy là một hành vi duy nhất. Trong Modern Java, bất kỳ interface nào chỉ có một phương thức trừu tượng đều là Functional Interface, đồng nghĩa với việc ta có thể sử dụng trực tiếp Lambda Expression hoặc Method Reference:

@FunctionalInterface
public interface PaymentStrategy {
    void pay(int amount);
}

public class ShoppingCart {
    public void checkout(int amount, PaymentStrategy paymentStrategy) {
        paymentStrategy.pay(amount);
    }
}

// Sử dụng không cần tạo concrete class:
ShoppingCart cart = new ShoppingCart();
cart.checkout(100, amount -> System.out.println("Thanh toán ví điện tử: " + amount));
cart.checkout(200, System.out::println); // Dùng method reference

Code sạch hơn rất nhiều, không phát sinh file và lớp rác cho những thuật toán nhỏ lẻ.

Bình luận (0)

Đang tải bình luận...