Tôi đã nhìn thấy một vài ví dụ minh họa mẫu khách truy cập. Trong tất cả chúng, mỗi phần tử truy cập có nguồn gốc thực hiện những gì thường được gọi là phương thức Accept().C++ mô hình khách truy cập: Tại sao mọi truy xuất có nguồn gốc đều được truy cập Accept()?
Trong một hệ thống các màu sắc, phương pháp này có thể trông giống như:
void Red::accept(Visitor *v)
{
v->visit(*this);
}
void Blue::accept(Visitor *v)
{
v->visit(*this);
}
Khi khách, cũng như những người thừa kế của nó, có những phương pháp:
visit(Red red);
visit(Blue blue)
Câu hỏi của tôi là tại sao không thực hiện điều này trong cùng một cách chỉ trong lớp cơ sở (trong ví dụ này: Color
) và đa hình sẽ thực hiện công việc, cụ thể là, lượt truy cập chính xác sẽ được gọi kể từ khi đối tượng là Red
loại động này là Red
để dereferencing nó sẽ mang lại một số Red
do đó sẽ làm cho chuyến thăm (đỏ) được gọi?
Tôi đang thiếu gì?
nếu bạn muốn trong lớp cơ sở thì bạn phải sử dụng [Mẫu mẫu tò mò định kỳ] (https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) để có được quyền 'this'. – user1810087
Trong ngôn ngữ động hơn, bạn có thể phải đặt tên cho các hàm 'visitBlue' và' visitRed'. Bạn có thể làm điều đó ở đây là tốt. Điều đó có giúp nó có ý nghĩa không? –
Câu trả lời đã được cung cấp, nhưng bạn có thể tìm thêm thông tin tìm kiếm trên web để "gửi đôi" (Tôi cho rằng bạn đã tìm kiếm "mẫu khách truy cập" và nó không giúp bạn), là tên của kỹ thuật được sử dụng đây. –