1. 程式人生 > >關於雙分派(Double Dispatch)的一點探討

關於雙分派(Double Dispatch)的一點探討

實際上,雙分派問題在Visitor模式中有所討論。在Visitor模式中,針對不同的元素的不同操作會產生不同結果,即一個動作,不但取決於元素的型別,也取決於操作的型別,於是出現了雙分派問題。Visitor模式的解決方法是,為所有的操作定義一個抽象基類,稱為 Visitor,為所有的元素也定義一個抽象基類,稱為 Element。一個Visitor類有一組 Visist方法,分別表示對不同元素的訪問(也就是操作)(如果用if-then-else鏈來寫,就變成了一個方法),一個Element類有一個 Accept方法,表示接受一個Visitor的訪問。如果我們把“接受訪問”看成是“被訪問”,從而把Accept
方法改叫BeVisited方法,那麼,與上面提到的collide函式與beCollided函式就很相似了(本文沒有把方法與函式區隔開來,本文認為方法與函式是一樣的)。