Qua các series tự học về Design Pattern, Hôm nay cafedevn chia sẻ cho ace ví dụ và code cụ thể về cách sử dụng Decorator design pattern với ngôn ngữ lập trình Python. Nhằm giúp ace hiểu rõ cách sử Pattern này với Python một cách nhanh nhất và áp dụng nó vào thực tế.
Nội dung chính
Mô tả code
Đính kèm các trách nhiệm bổ sung vào một đối tượng động. Trang trí cung cấp một giải pháp thay thế linh hoạt cho phân lớp để mở rộng chức năng.
Phần code
"""
Attach additional responsibilities to an object dynamically. Decorators
provide a flexible alternative to subclassing for extending
functionality.
"""
import abc
class Component(metaclass=abc.ABCMeta):
"""
Define the interface for objects that can have responsibilities
added to them dynamically.
"""
@abc.abstractmethod
def operation(self):
pass
class Decorator(Component, metaclass=abc.ABCMeta):
"""
Maintain a reference to a Component object and define an interface
that conforms to Component's interface.
"""
def __init__(self, component):
self._component = component
@abc.abstractmethod
def operation(self):
pass
class ConcreteDecoratorA(Decorator):
"""
Add responsibilities to the component.
"""
def operation(self):
# ...
self._component.operation()
# ...
class ConcreteDecoratorB(Decorator):
"""
Add responsibilities to the component.
"""
def operation(self):
# ...
self._component.operation()
# ...
class ConcreteComponent(Component):
"""
Define an object to which additional responsibilities can be
attached.
"""
def operation(self):
pass
def main():
concrete_component = ConcreteComponent()
concrete_decorator_a = ConcreteDecoratorA(concrete_component)
concrete_decorator_b = ConcreteDecoratorB(concrete_decorator_a)
concrete_decorator_b.operation()
if __name__ == "__main__":
main()
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Tài liệu từ cafedev:
- Full series tự học Design Pattern từ cơ bản tới nâng cao tại đây nha.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!