Design Patterns – Decorator Pattern

Rate this post
pizza-decorator
Pizza Decorator

Tình huống:

Bạn đang làm nhân viên lập trình và bạn đang ở trong căn tin công ty.
“Hôm nay có món gì?” bạn hỏi tay đầu bếp khó chịu đang đứng sau bếp nướng.
“Cho một cái pizza,” bạn nói và xoay xoay cái khay trong tay.
Người đầu bếp mang cái pizza đến bàn tính tiền, không quên hỏi lại “Có thêm thịt xông khói
không?”
“Chắc chắn rồi”, bạn nói.
Người đầu bếp xóa các phiếu ăn cũ trên máy tính tiền và khởi động lại.
“pizza và thịt xông khói”. Vừa nói anh ta vừa gõ vào máy tính tiền.
“Cho thêm một ít phô mai” Bạn nói.
Người đầu bếp ném một ánh nhìn khó chịu , xóa cái phiếu ăn, mổ mổ cái bàn phím và nói
“Pizza với phô mai và thịt xông khói. Ok. Đủ rồi chứ?”
“Hmm”, bạn nói, nhìn quét qua cái thực đơn “Hay là thêm một chút nấm?”
Người đầu bếp nhìn chằm chằm vào bạn và dường như định văng ra một vài câu khó chịu gì
đó nhưng vẫn nhập phiếu ăn vào máy.
“Hey”, bạn nói. “Anh chắc chắn là được lợi nhiều hơn từ việc sử dụng mẫu thiết kế trang trí
Decorator Pattern chứ hả?”.

“Vâng”, anh đầu bếp nói, ngạc nhiên khi bạn nói về vấn đề này “Tôi đã nói vấn đề này cả
ngàn lần rồi”. Bạn cầm cái pizza phô mai thịt xông khói với vẻ hạnh phúc và nói “Thêm một vài lát cà chua nữa thì tuyệt!”
Bài này nói về mẫu thiết kế quan trọng, nó sẽ lấp đầy những thiếu sót trong việc trình hướng đối tượng cơ bản, đặc biệt là ở khả năng kế thừa. Đó là mẫu trang trí Decorator Pattern.
Mẫu trang trí Decorator Pattern là lựa chọn hoàn hảo cho tình huống tôi vừa nêu ở trên bởi vì ta
đang nói về khả năng mở rộng chức năng cho một lớp có sẵn. Sau khi viết một lớp, bạn có
thể thêm phần trang trí Decorator Pattern (các lớp mở rộng) để mở rộng lớp này. Khi đó bạn không
phải sửa đổi lên lớp gốc. Kết quả là cái Pizza của bạn trở thành pizza phô mai,
rồi pizza phô mai thịt xông khói, mọi thứ thật dễ dàng.

Nguyên lý “Mở cho việc mở rộng. Đóng cho việc sửa đổi”.
Một trong những khía cạnh quan trọng nhất trong quá trình phát triển một ứng dụng là các nhà phát triển và lập trình viên phải đối đầu với sự thay đổi, và đó là lý do vì sao các mẫu thiết kế này lại được giới thiệu trước tiên. Có thể nói các Mẫu Thiết Kế sẽ giúp bạn giải quyết được các sự thay đổi, và bạn có thể dễ dàng chuyển đổi mã nguồn của mình cho các trường hợp mới và bất khả kháng. Lập trình viên thường tiêu tốn thời gian cho việc mở rộng và thay đổi mã nguồn hơn là phát triển mã nguồn gốc.
Mẫu trang trí Decorator cũng tương tự vậy, nó cho phép bạn viết tiếp mã nguồn, tránh việc sửa đổi lên mã nguồn gốc, trong khi vẫn đáp ứng được yêu cầu thay đổi. Đó là điểm chính yếu tôi muốn nhấn mạnh.


Ghi nhớ: Hãy làm cho mã nguồn của bạn đáp ứng được nguyên tắc “Luôn đóng cho sự
chỉnh sửa, và luôn mở cho việc mở rộng” càng nhiều càng tốt. Nói cách khác, hãy thiết kế
mã nguồn sao cho không cần phải thay đổi gì nhiều nhưng luôn có thể mở rộng khi cần.

Vậy làm thế nào để cài đặt một mẫu trang trí Decorator. Bài tiếp theo chúng ta sẽ cùng tìm hiểu vấn đề này!