1. 程式人生 > >訪問者模式 (Visitor Pattern)

訪問者模式 (Visitor Pattern)

          文件地址:《設計模式之禪》​​​​​​​

          切入故事: 員工的隱私何在

        定義: Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates. (封裝一些作用於某種資料結構中的各元素的操作, 它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。 )

        通用類圖:

                

                ● Visitor——抽象訪問者

                        抽象類或者介面, 宣告訪問者可以訪問哪些元素, 具體到程式中就是visit方法的引數定義哪些物件是可以被訪問的。

                ● ConcreteVisitor——具體訪問者

                        它影響訪問者訪問到一個類後該怎麼幹, 要做什麼事情。

                ● Element——抽象元素

                        介面或者抽象類, 宣告接受哪一類訪問者訪問, 程式上是通過accept方法中的引數來定義的。

                ● ConcreteElement——具體元素

                        實現accept方法, 通常是visitor.visit(this), 基本上都形成了一種模式了。

                ● ObjectStruture——結構物件

                        元素產生者, 一般容納在多個不同類、 不同介面的容器, 如List、 Set、 Map等, 在專案中, 一般很少抽象出這個角色。

        優點:

                 ● 符合單一職責原則

                 ● 優秀的擴充套件性

                 ● 靈活性非常高

        缺點:

                 ● 具體元素對訪問者公佈細節

                 ● 具體元素變更比較困難

                 ● 違背了依賴倒置轉原則

        使用場景: 業務規則要求遍歷多個不同的物件。

                 ● 一個物件結構包含很多類物件, 它們有不同的介面, 而你想對這些物件實施一些依賴於其具體類的操作, 也就說是用迭代器模式已經不能勝任的情景。

                ● 需要對一個物件結構中的物件進行很多不同並且不相關的操作, 而你想避免讓這些操作“汙染”這些物件的類。