2009-04-27 28 views
8

Tìm thấy bản thân mình đang cố gắng tìm một liên kết đến một định nghĩa chính thức của mẫu thiết kế này mà tôi tin rằng tôi đã thấy trong Go4 nhưng dường như không thể tìm thấy nó ở bất cứ đâu.Mẫu này được gọi là gì (giúp tránh việc nhập kiểu)?

class Processor{ 
    ProcessParameter(AbstractParameter x){ 
     x.Process(this); 
    } 

    ProcessParameter(ParameterA x){ 
     ... A-specific logic... 
    } 

    ProcessParameter(ParameterB x){ 
     ... B-specific logic... 
    } 
} 

abstract class AbstractParameter{ 
    abstract void Process(Processor p); 
} 

class ParameterA : AbstractParameter{ 
    override void Process(Processor p){ 
     p.ProcessParameter(this); 
    } 
} 

class ParameterB : AbstractParameter{ 
    override void Process(Processor p){ 
     p.ProcessParameter(this); 
    } 
} 

Trả lời

13

Đây là Visitor Pattern. Kỹ thuật này được gọi là "công văn kép".

+0

Tôi thích phiên bản đầu tiên của câu trả lời của bạn tốt hơn. Đây là _is_ Double Dispatch. Mẫu Khách truy cập thêm khái niệm _multiple_ Khách truy cập (được gọi là "Bộ xử lý" trong ví dụ của tôi). – zvolkov

+0

Tôi đã chuyển sự nhấn mạnh kể từ khi tiêu đề yêu cầu "mẫu", và câu hỏi đề cập đến GoF. – erickson

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