何時採用訪問者模式
適用以下情況:
- 對象結構包含許多類型,缺乏統一介面,但希望操作統一。
- 需為對象結構中的類型新增操作,且不想修改原有代碼。
- 結構中某些類型耦合,且實現常變動。
- 需針對同層次不同類型甚至不同層次類型進行迭代。
可見訪問者模式主要針對對象結構(常具層次關係),設計時需預留接受訪問者的介面。
實現要點
- 每個元素需提供
Accept() 方法接受訪問者。
- 雙重多態分派:確定訪問者型別,再確定訪問者中的方法。
- 若層次結構包含多種元素類型,可透過
ObjectStructure 角色封裝。
注意事項(三大缺點)
- 難以擴充對象結構:新增元素類型需修改所有訪問者。可透過變化緩解。
- 過度暴露內部結構:訪問者需存取內部元素才能實質操作,破壞封裝。
- 需預先規劃:必須預見需求並提前設置
Accept 方法。