2017 01 18 學習日記 訪問者模式

2021-07-26 06:16:49 字數 1935 閱讀 6088

最後乙個設計模式了,對物件導向的理念終於算是入了門。明天開始重新好好啃一遍演算法導論~!~~~

訪問者模式(visitor pattern)

定義:表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。

角色:visitor( 抽象訪問者角色):為該物件結構中具體元素角色宣告乙個訪問操作介面。該操作介面的名字和引數標識了傳送訪問請求給具體訪問者的具體元素角色,這樣訪問者就可以通過該元素角色的特定介面直接訪問它。

concretevisitor(具體訪問者角色):實現visitor宣告的介面。

element(抽象元素): 定義乙個接受訪問操作(accept()),它以乙個訪問者(visitor)作為引數。

concreteelement(具體元素):實現了抽象元素(element)所定義的接受操作介面。

objectstructure:(結構物件角色):這是使用訪問者模式必備的角色。它具備以下特性:能列舉它的元素;可以提供乙個高層介面以允許訪問者訪問它的元素;如有需要,可以設計成乙個復合物件或者乙個聚集(如乙個列表或無序集合)。

類圖:

**:

abstract class visitor

class concretevisitor1 : visitor

被訪問", concreteelementa.gettype().name, this.gettype().name);

}public override void visitconcreteelementb(concreteelementb concreteelementb)

被訪問", concreteelementb.gettype().name, this.gettype().name);}}

class concretevisitor2 : visitor

被訪問", concreteelementa.gettype().name, this.gettype().name);

}public override void visitconcreteelementb(concreteelementb concreteelementb)

被訪問", concreteelementb.gettype().name, this.gettype().name);}}

abstract class element

class concreteelementa : element

public void operationa()

}class concreteelementb : element

public void operationb()

}class objectstructure

public void detach(element element)

public void accept(visitor visitor)}}

訪問者模式把資料結構和作用於結構上的操作解耦合,使得操作集合可相對自由地演化。

訪問者模式適用於資料結構相對穩定演算法又易變化的系統。因為訪問者模式使得演算法操作增加變得容易。若系統資料結構物件易於變化,經常有新的資料結構增加進來,則不適合使用訪問者模式。

訪問者模式的優點是增加操作很容易,因為增加操作意味著增加新的訪問者。訪問者模式將有關行為集中到乙個訪問者物件中,其改變不影響系統資料結構。其缺點就是增加新的資料結構很困難。

優點:符合單一職責原則:凡是適用訪問者模式的場景中,元素類中需要封裝在訪問者中的操作必定是與元素類本身關係不大且是易變的操作,使用訪問者模式一方面符合單一職責原則,另一方面,因為被封裝的操作通常來說都是易變的,所以當發生變化時,就可以在不改變元素類本身的前提下,實現對變化部分的擴充套件。

擴充套件性良好:元素類可以通過接受不同的訪問者來實現對不同操作的擴充套件。

訪問者模式

訪問者模式 visitor pattern 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。一 問題 集合是大多數的系統都要處理的一種容器物件,它儲存了對其它物件的引用。一般情況下,在集合上採取的...

訪問者模式

行為模式中的訪問者模式 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作,一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。動機 類層次結構中可能經常由於引入新的操作,從而將型別變得脆弱。在軟體構建過程中,由於需求的改變,某些類層次結構中常常需要增...

訪問者模式

1.說明 namespace visitorspattern 象棋類 public abstract class chess public class redchess chess public class blackchess chess 在贏的情況下的狀態 public class win ac...