Tôi đã đọc mẫu thiết kế trang trí từ wiki http://en.wikipedia.org/wiki/Decorator_pattern và ví dụ mã từ http://www.vincehuston.org/dp/decorator.html.Mẫu thiết kế trang trí so với kế thừa?
Tôi thấy điểm thừa kế truyền thống tuân theo mẫu 'is-a' trong khi trang trí theo sau mẫu 'có-a'. Và quy ước gọi của trang trí trông giống như một 'làn da' trên 'da' .. trên 'lõi'. ví dụ.
I* anXYZ = new Z(new Y(new X(new A)));
như minh họa trong liên kết ví dụ mã trên.
Tuy nhiên vẫn còn một vài câu hỏi mà tôi không hiểu:
gì wiki ý nghĩa của 'Những mẫu trang trí có thể được sử dụng để mở rộng (trang trí) các chức năng của một đối tượng nhất định tại thời gian chạy '? 'mới ... (mới ... (mới ...))' là cuộc gọi thời gian chạy và tốt nhưng là 'AwithXYZ anXYZ;' là một thừa kế tại thời gian biên dịch và là xấu?
từ liên kết ví dụ mã tôi có thể thấy rằng số định nghĩa lớp gần như giống nhau trong cả hai triển khai. Tôi nhớ lại trong một số cuốn sách mẫu thiết kế khác như 'Đầu mẫu thiết kế đầu tiên'. Họ sử dụng cà phê starbuzz làm ví dụ và nói rằng thừa kế truyền thống sẽ gây ra vụ nổ lớp học '' cho mỗi kết hợp cà phê, bạn sẽ đưa ra một lớp cho nó. Nhưng nó không giống với trang trí trong trường hợp này? Nếu một lớp trang trí có thể mất bất kỳ lớp trừu tượng và trang trí nó, sau đó tôi đoán nó ngăn chặn sự bùng nổ, nhưng từ mã ví dụ, bạn có chính xáC# định nghĩa lớp, không kém ...
bất cứ ai có thể giúp giải thích?
Thanks a lot,
[Khi chúng ta nên sử dụng hoa văn trang trí thiết kế và không thừa kế] (http: // www. singhajit.com/decorator-design-pattern/) –