Tôi muốn hỏi điều gì đó về ví dụ vịt về cuốn sách này khiến tôi bối rối và tôi cảm thấy mâu thuẫn.Mẫu chiến lược mẫu vịt - Đầu mẫu thiết kế đầu tiên
Vấn đề
kết luận
Ông nói "khi joe thêm hành vi mới cho lớp cha vịt, ông cũng đã được bổ sung thêm hành vi đó không thích hợp cho Các phân lớp con vịt "
NHƯNG trong kết luận ông đã thêm performFly()
và performQuack();
điều gì là khác nhau bởi vì tôi nghĩ rằng nó giống với he was also adding behavior that was not appropiate for sume Duck subclasses
?
** hình ảnh được lấy từ cuốn sách Đầu mẫu thiết kế đầu tiên ** câu hỏi này không nói cuốn sách này là không tốt, cuốn sách này thực sự là tốt trong quan điểm của tôi. đây chỉ là tôi, người đang hỏi cái gì đó mà tôi không nhận được từ cuốn sách.
Tất cả những gì họ đã làm là lấy một hàm (quack) và tách nó thành một lớp riêng biệt. Đó là một chút phức tạp. Sẽ tốt hơn nếu đặt một lớp con vịt có tên là "FlyingDucks" và sau đó đặt Fly() vào đó. Sau đó, tất cả vịt bay sẽ kế thừa lớp đó. Cách khác, làm cho FLy() trừu tượng, buộc mọi phân lớp phải xác định ý nghĩa của nó để bay. Những gì họ làm là làm việc nhiều hơn và phức tạp hơn. Mỗi phân lớp cần chọn một lớp Fly để gán cho flyBehavior - ngay cả khi chúng không thể bay được. – kainaw
Tôi có đúng không nếu tôi nói 'vấn đề' và' kết luận' là mâu thuẫn? hoặc tôi chỉ không hiểu ý anh ấy là gì? – Kakashi
Nó sẽ là thiết kế tốt hơn để nhận ra rằng, cách thức (trang điểm) vấn đề là xem xét vịt, vịt cao su không phải là vịt - nó không bay, nó không bơi (trừ khi bạn bao gồm nổi), vv Nếu, vì lý do nào đó, bạn thực sự muốn có một lớp bao gồm vịt thật và vịt cao su, thì bạn nên tìm kiếm những điểm chung trong những thứ này, không gian vấn đề của bạn, và biến chúng thành những thuộc tính chung; không bắt đầu với các thuộc tính chung cho một số mục trong không gian của bạn và buộc phù hợp với các mục khác. – arcy