Template Method Pattern - Áp dụng làm món trà vải Thái Công

07 tháng 09, 2024 - 602 lượt xem

Template Method Design Pattern trong Java

What (Khái niệm)
Template Method Design Pattern là một mẫu thiết kế hành vi cho phép định nghĩa một quy trình (algorithm) trong một phương thức, trong đó một số bước của quy trình có thể được thực hiện bởi các lớp con. Mẫu này giúp tách biệt các phần không thay đổi của thuật toán khỏi các phần có thể thay đổi.

Why (Tại sao cần dùng đến template method)

  • Tái sử dụng mã: Giúp tránh lặp mã bằng cách định nghĩa quy trình chung trong lớp cơ sở.
  • Dễ dàng mở rộng: Bạn có thể mở rộng các lớp con mà không cần thay đổi mã nguồn của lớp cơ sở.
  • Kiểm soát quy trình: Cho phép kiểm soát quy trình tổng thể trong khi cho phép các lớp con tùy chỉnh các bước cụ thể.

When (Khi nào nên sử dụng)

  • Khi bạn có một quy trình chung mà một số bước có thể thay đổi.
  • Khi bạn muốn định nghĩa một quy trình mà không cần phải lặp lại mã cho từng lớp con.
  • Khi bạn muốn kiểm soát các bước của một thuật toán trong khi cho phép các lớp con tùy chỉnh một số bước.

How (Cách thực hiện)

  1. Tạo một lớp trừu tượng: Định nghĩa phương thức template, bao gồm các bước cố định và gọi các phương thức trừu tượng cho các bước có thể thay đổi.
  2. Tạo các phương thức trừu tượng: Các phương thức này sẽ được triển khai bởi các lớp con.
  3. Tạo các lớp cụ thể: Triển khai các phương thức trừu tượng để tùy chỉnh các bước của quy trình.
  4. Sử dụng Template Method: Tạo các đối tượng và gọi phương thức template để thực hiện quy trình.

Ví dụ Cụ Thể
Giả sử Thái Công thuê bạn về để pha chế món trà vải hot hit gần đây trên tiktok. Để cho món trà vải đạt đủ tiêu chuẩn, bạn cần phải thực hiện theo đúng quy trình mà ông ấy đưa ra

  1. Tạo lớp trừu tượng Beverage
public abstract class Beverage {
    // Template method
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    protected abstract void brew();
    protected abstract void addCondiments();

    private void boilWater() {
        System.out.println("Boiling water");
    }

    private void pourInCup() {
        System.out.println("Pouring into cup");
    }
}

  1. Tạo lớp cụ thể ThaiCongLycheeTea
public class ThaiCongLycheeTea extends Beverage {
    @Override
    protected void brew() {
        System.out.println("Steeping the Thai tea leaves");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding lychee syrup and fresh lychee pieces");
    }
}
  1. Tạo lớp chính để sử dụng Template Method
public class BeveragePreparationApp {
    public static void main(String[] args) {
        Beverage thaiCongLycheeTea = new ThaiCongLycheeTea();
        thaiCongLycheeTea.prepareRecipe();
        System.out.println("Tôi thích trà vải ở Techmaster =]]")
    }
}

Vải

Bình luận

avatar
Trịnh Minh Cường 2024-09-07 08:11:20.548017 +0000 UTC

Ha ha. cool

Avatar
avatar
Lê Trung Dũng 2024-09-09 02:46:12.715411 +0000 UTC

Giật tit ghê qua thầy :v

Chu Tiến Đạt
Chu Tiến Đạt 2024-09-09 03:28:52.468586 +0000 UTC

Phải có sự kích thích học mới vào đầu e ak :)))

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  +3 Thích
+3