Câu hỏi phỏng vấn Javascript
Câu hỏi

Triển khai Command Pattern trong Javascript như thế nào?

Câu trả lời

Command Pattern là một mẫu thiết kế hành vi (behavioral design pattern) trong lập trình hướng đối tượng, nó cho phép bạn đóng gói các yêu cầu dưới dạng một đối tượng, từ đó cho phép người dùng tham chiếu đến các yêu cầu này, xếp hàng hoặc ghi nhật ký chúng, và hỗ trợ các hoạt động hoàn tác.

Cách triển khai Command Pattern

Để triển khai Command Pattern trong JavaScript, bạn cần tạo ra các đối tượng command với một phương thức execute chính và một hoặc nhiều đối tượng receiver mà command sẽ thao tác trên đó. Bạn cũng có thể cần một Invoker để quản lý và gọi các command.

Bước 1: Tạo Command Interface

Đầu tiên, bạn cần một interface cho các command với ít nhất một phương thức execute.

javascript Copy
class Command {
  execute() {
    throw new Error('This method must be overwritten!');
  }
}

Bước 2: Tạo Concrete Commands

Sau đó, tạo các lớp concrete command thực thi interface command và triển khai phương thức execute.

javascript Copy
class TurnOnCommand extends Command {
  constructor(receiver) {
    super();
    this.receiver = receiver;
  }

  execute() {
    this.receiver.turnOn();
  }
}

class TurnOffCommand extends Command {
  constructor(receiver) {
    super();
    this.receiver = receiver;
  }

  execute() {
    this.receiver.turnOff();
  }
}

Bước 3: Tạo Receiver

Tạo một hoặc nhiều receiver chứa logic thực sự để thực hiện các hành động.

javascript Copy
class Light {
  turnOn() {
    console.log('The light is on');
  }

  turnOff() {
    console.log('The light is off');
  }
}

Bước 4: Tạo Invoker

Invoker sẽ gọi command mà không cần biết chi tiết về cách thức thực hiện.

javascript Copy
class RemoteControl {
  submit(command) {
    command.execute();
  }
}

Bước 5: Sử dụng Command Pattern

Cuối cùng, bạn có thể sử dụng Command Pattern để thực thi các hành động.

javascript Copy
const light = new Light();
const turnOnLight = new TurnOnCommand(light);
const turnOffLight = new TurnOffCommand(light);

const remote = new RemoteControl();
remote.submit(turnOnLight); // Output: The light is on
remote.submit(turnOffLight); // Output: The light is off

Kết luận

Command Pattern trong JavaScript giúp tách biệt phần logic yêu cầu thực thi từ phần logic thực sự thực hiện hành động. Điều này không chỉ giúp mã nguồn dễ bảo trì và mở rộng hơn mà còn hỗ trợ thêm các tính năng như hoàn tác và ghi nhật ký một cách dễ dàng.

senior

senior

Gợi ý câu hỏi phỏng vấn

middle

Kết quả đoạn code sau là gì? Hãy giải thích tại sao?

middle

Callback hell trong Javascript là gì?

middle

Trong Javascript, Anonymous Function thường dùng cho trường hợp nào?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào