2011-07-20 21 views
13

Tôi đã xem xét các câu hỏi khác liên quan đến mẫu khách truy cập nhưng không thể hiểu được việc triển khai công văn kép trong mẫu khách truy cập.Cách công văn đôi hoạt động trong mẫu Khách truy cập?

Vui lòng tham khảo liên kết Visitor Pattern

làm việc như thế công văn đúp trong mô hình của khách?

+0

Bạn có thể cụ thể hơn về những gì bạn không hiểu không? – jzd

+0

Imho bạn nên suy nghĩ để đôi công văn như là một quá tải chức năng tại thời gian chạy thay vì biên dịch thời gian. – dierre

Trả lời

16

Phương thức accept của đối tượng phần tử nhận đối tượng khách truy cập và nó gọi phương thức visit trên đối tượng khách truy cập. Vì đối tượng khách truy cập có một số phương thức visit, dựa trên loại phần tử, phương thức thích hợp visit được gọi. Ở đây chúng tôi có hai cuộc gọi (công văn kép) chỉ định thành phần và hoạt động bên phải cho phần tử (dựa trên loại của nó).

6

Vâng, đây là trích dẫn có liên quan từ bài viết rằng:

khách thực hiện “văn kép”. Các thông điệp OO thường biểu thị "một công văn" - thao tác được thực hiện phụ thuộc vào: tên của yêu cầu và loại của người nhận. Trong "công văn kép", thao tác được thực thi phụ thuộc vào: tên của yêu cầu và loại bộ thu TWO (loại Khách truy cập và loại phần tử mà nó truy cập).

Điều này về cơ bản có nghĩa là khách truy cập khác nhau có thể truy cập cùng loại và các loại khác nhau có thể được truy cập bởi cùng một khách truy cập. Ảnh hưởng của hoạt động được đặt tên được thực hiện bằng mẫu khách truy cập có thể phụ thuộc vào số khách truy cập được truy cập (công văn kép).

24

Single-văn

Single dispatch

Giả Node là một lớp giao diện và hai lớp phụ là triển khai cụ thể của giao diện.

Nếu bạn gọi phương thức GenerateCode() trên phiên bản nút, thao tác thực tế sẽ được thực thi tùy thuộc vào loại loại của nút. Nó có thể là phương pháp trong VariableRefNode hoặc AssignmentNode. Nó giống nhau nếu bạn gọi PrettyPrint(). Vì vậy, hoạt động thực tế được thực hiện tùy thuộc vào tên của phương thức bạn đang gọi và loại của nút.

đúp văn

Nodes Visitors

Lần này Node là cho phép bạn vượt qua một tham số có kiểu NodeVisitor phương pháp của nó được gọi là Accept.Trong chương trình của bạn nếu bạn gọi Accept về một trường hợp nút, các hoạt động thực tế nhận được thực hiện bây giờ phụ thuộc vào loại của nút (VariableRefNode hoặc AssignmentNode) loại trường hợp khách truy cập bạn thông qua vào Accept (TypeCheckingVisitor hoặc CodeGeneratingVisitor) .

+0

Không hiểu tại sao câu trả lời của bạn không nhận được nhiều phiếu bầu nhất, phải không? –

Các vấn đề liên quan