Mô hình Trang trí trong Python

Mô hình Trang trí là một mô hình thiết kế cấu trúc cho phép chúng ta thêm hành vi vào đối tượng một cách động, mà không cần sử dụng thừa kế. Mô hình này thường bao gồm các thành phần sau:

  • Thành phần trừu tượng (Component): Định nghĩa một giao diện chung cho cả đối tượng được trang trí và trang trí.
  • Thành phần cụ thể (Concrete Component): Thực hiện giao diện của thành phần trừu tượng và cung cấp hành vi mặc định.
  • Trang trí trừu tượng (Decorator): Định nghĩa một giao diện để bọc thành phần trừu tượng.
  • Trang trí cụ thể (Concrete Decorator): Thực hiện giao diện của trang trí trừu tượng và bọc thành phần trừu tượng.

Dưới đây là một ví dụ đơn giản trong Python minh họa cách sử dụng mô hình Trang trí:

Các lớp cơ bản và mối quan hệ giữa chúng:

class BaseComponent:
    def operation(self):
        pass

class BaseDecorator(BaseComponent):
    def __init__(self, component):
        self.component = component

    def operation(self):
        self.component.operation()

Thực hiện các thành phần cụ thể:

class ConcreteComponent(BaseComponent):
    def operation(self):
        print('ConcreteComponent: operation')

class ConcreteDecoratorA(BaseDecorator):
    def operation(self):
        super().operation()
        print('ConcreteDecoratorA: operation')

class ConcreteDecoratorB(BaseDecorator):
    def operation(self):
        super().operation()
        print('ConcreteDecoratorB: operation')

Cách sử dụng:

component = ConcreteComponent()
decorator_a = ConcreteDecoratorA(component)
decorator_b = ConcreteDecoratorB(decorator_a)

decorator_b.operation()

Trong ví dụ trên, chúng ta đã định nghĩa một thành phần trừu tượng BaseComponent với phương thức operation(). Sau đó, chúng ta tạo một thành phần cụ thể ConcreteComponent thực hiện phương thức này. Tiếp theo, chúng ta định nghĩa một trang trí trừu tượng BaseDecorator cũng có phương thức operation() để bọc thành phần. Cuối cùng, chúng ta tạo hai trang trí cụ thể ConcreteDecoratorAConcreteDecoratorB, mỗi trang trí này sẽ gọi phương thức operation() của đối tượng được truyền vào và thêm hành vi riêng.

Khi sử dụng mô hình Trang trí, chúng ta có thể định nghĩa hành vi cơ bản của đối tượng thông qua thành phần và thành phần cụ thể. Sau đó, chúng ta có thể thêm hành vi động vào đối tượng bằng cách sử dụng trang trí trừu tượng và trang trí cụ thể. Ví dụ trên cho thấy cách tạo một đối tượng ConcreteComponent và trang trí nó bằng ConcreteDecoratorAConcreteDecoratorB để thêm hành vi.

Mô hình Trang trí giúp chúng ta thêm hành vi vào đối tượng một cách động, không cần dùng thừa kế, do đó tăng tính bảo trì và mở rộng của mã. Đồng thời, nó cũng giúp giảm thiểu việc tạo ra nhiều lớp con, từ đó giảm độ phức tạp của mã.

Thẻ: python design patterns decorator pattern structural patterns

Đăng vào ngày 19 tháng 5 lúc 02:42