何為訪問者模式
定義:表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作。它讓我們可以在不改變各元素的類的前提下定義作用于這些元素的新操作
靜態(tài)關(guān)系圖如下
訪問者模式類圖
承包商例子的類圖,其中承包商是訪問者
何時(shí)使用訪問者模式
1、一個(gè)復(fù)雜的對(duì)象結(jié)構(gòu)包含很多其他對(duì)象,他們有不同的接口(比如組合體),但是想對(duì)這些對(duì)象實(shí)施一些依賴于其具體類型的操作。
2、需要對(duì)一個(gè)組合體結(jié)構(gòu)中的對(duì)象進(jìn)行很多不相關(guān)的操作,但是不想讓這些操作“污染”這些對(duì)象的類,可以將相關(guān)的操作集中起來,定義在一個(gè)訪問者類中,并在需要在訪問者中定義的操作時(shí)使用它。
3、定義復(fù)雜結(jié)構(gòu)的類很少作修改,但經(jīng)常需要向其添加新的操作。
MarkRenderer以及它和Mark組合體之間的關(guān)系的類圖
訪問者模式有個(gè)需要注意的缺點(diǎn),那就是,訪問者與目標(biāo)類耦合在一起。