想像你是一位探險家,走進了一座神秘古城。這座城裡有著各種各樣的建築:宏偉的宮殿、莊嚴的神廟、熱鬧的市集。每個地方都有它獨特的風格和探索方式。作為探險家,你必須用不同的方法來了解每個地方,但你不需要改變這些建築本身,只要隨著地方變化調整探索的方式。這就是訪問者模式的精髓!
什麼是訪問者模式?
訪問者模式是一種設計模式,讓你在不修改物件本身的情況下,對其新增行為。換句話說你可以在不打擾物件原本結構的前提下,隨時加入新操作。這就像探險家去不同地方探索,每個地方不需要變,但探險家可以隨意選擇要怎麼探索。
繪圖軟體的應用
假設你正在開發一個繪圖軟體,裡面有圓形、矩形、三角形等圖形。突然接到一個新需求:計算每個圖形的面積。此時訪問者模式就派上用場,我們可以為每個圖形新增一個"訪問者",讓這個訪問者負責計算圖形的面積,而不用改變圖形本身的程式碼。
這樣一來,當你日後想再新增計算周長、顯示圖形等功能時,只需再新增相應的訪問者,而圖形類別本身則不需要動。
檔案系統中的應用
訪問者模式也常用在檔案結構分析中。想像有一個複雜的檔案系統,裡面有檔案和資料夾。你想統計每個資料夾內所有檔案的大小,這時你可以用一個訪問者來遍歷這些檔案和資料夾,並計算出總大小。只需要增加訪問者就能新增不同的操作,比如計算檔案數量、顯示目錄結構等。
訪問者模式優缺點
訪問者模式的好處是它遵守「開閉原則」,讓你在不改變物件結構的前提下,輕鬆新增功能。而且訪問者可以集中處理某一類操作,讓程式碼更容易閱讀、容易管理。
但缺點是若物件結構經常變動,你就得頻繁更新訪問者的程式碼,這會增加維護成本。對於物件類型很多的情況,訪問者也會變得難以管理,因為每新增一種類型,都必須在訪問者裡新增對應的邏輯。
總結一下,訪問者模式非常適合那些物件結構穩定、但需要經常新增行為的系統。它讓我們可以靈活地擴展系統功能,而不影響原有結構。不過在結構變化頻繁或物件種類繁多的系統中,訪問者模式可能會帶來額外的維護挑戰。
這次探索完訪問者模式的神秘古城,讓我們在未來的開發旅途中靈活運用這個模式,輕鬆解鎖更多可能性!
若想一探設計模式的奧秘,不妨參考我在iThome鐵人賽的文章。
https://ithelp.ithome.com.tw/articles/10350996