Câu hỏi phỏng vấn Design pattern
Câu hỏi

Design Pattern Decorator là gì?

Câu trả lời

Thuộc nhóm structural design pattern cho phép người dùng thêm tính năng vào đối tượng đã tồn tại mà không phải chỉnh sửa cấu trúc của nó. Pattern này tạo một lớp gọi là decorator hành động như một wrapper, bọc đối tượng đã tồn tại bằng cách giữ nguyên đặc trưng của các phương thức lớp. Pattern này sử dụng lớp trừu tượng và itnerface với composition để triển khai wrapper. Chúng chủ yếu được sử dụng để áp dụng SRP (Nguyên tắc Trách nhiệm Đơn lẻ) khi ya phân chia các chức năng thành các lớp với các mối quan tâm duy nhất. Pattern này có cấu trúc tương tự như CoR ở trên. Các bước triển khai decorator:

  • Tạo một interface và lớp cụ thể triển khai interface này.
  • Tạo lớp trừu tượng decorator để triển khai interface trên.
  • Tạo lớp decorator cụ thể mở rộng từ lớp trừu tượng ở trên.
  • Sử dụng lớp decorator cụ thể để thêm tính năng cho đối tượng interface và xác minh kết quả.

Ta làm thử ví dụ để dễ hiểu. Ở đây ta tạo interface Shape và các lớp cụ thể của nó RectangleTriangle để triển khai interface này. Ta sẽ tạo lớp trừu tượng là ShapeDecorator để triển khai interface Shape. Sau đó ta tạo RedColorDecorator mở rộng từ ShapeDecorator. Ta sẽ sử dụng decorator này cho các triển khai tính năng.

Design Pattern Decorator là gì?
  • Tạo interface Shape:
// Shape.java
public interface Shape {
    void draw();
}
  • Tạo lớp cụ thể Rectangle và Triangle để triển khai interface trên
// Rectangle.java
public class Rectangle implements Shape {
    // Overriding the draw method
    @Override public void draw()
    {
        System.out.println("Rectangle Drawn...");
    }
}
// Triangle.java
public class Triangle implements Shape {
    // Overriding the draw method
    @Override public void dra...
middle

middle

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

middle

Bạn hiểu gì về Singleton Pattern? Dùng nó như nào và implement ra sao?

senior

Các thành phần trong Composite Entity là gì?

middle

Vấn đề mà pattern builder giải quyết là gì?

Bình luận

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

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