訪問者模式

2021-07-26 07:01:43 字數 2114 閱讀 3265

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

訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。

先看一下類圖:

訪問者模式主要由:visitor(訪問者角色)、concrete visitor(具體訪問者角色)、element(元素角色)、concrete element(具體元素角色)、object structure(物件結構角色)。

訪問者角色(visitor): 為該物件結構中具體元素角色宣告乙個訪問操作介面.

具體訪問者角色(concrete visitor): 實現每個由訪問者角色(visitor)宣告的操作.

元素角色(element): 定義乙個accept操作,它以乙個訪問者為引數.

具體元素角色(concrete element): 實現由元素角色提供的accept操作.

物件結構角色(object structure):可以提供乙個高層的介面以允許該訪問者訪問它的元素; 可以是乙個復合(組合模式)或是乙個集合, 如乙個列表或乙個無序集合.

訪問者模式具有以下的幾個特點:

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

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

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

在以下情況中我們會考慮使用訪問者模式:

1. 乙個物件結構包含很多類物件,它們有不同的介面,而你想對這些物件實施一些依賴於其具體類的操作。

2. 需要對乙個物件結構中的物件進行很多不同的並且不相關的操作,而你想避免讓這些操作「汙染」這些物件的類。visitor模式使得你可以將相關的操作集中起來 定義在乙個類中。

3. 當該物件結構被很多應用共享時,用visitor模式讓每個應用僅包含需要用到的操作。

4. 定義物件結構的類很少改變,但經常需要在此結構上定義新的操作。改變物件結構類需要重定義對所有訪問者的介面,這可能需要很大的代價。如果物件結構類經常改變,那麼可能還是在這些類中定義這些操作較好。

元素角色(element)

public

inte***ce

subject

訪問者角色(visitor)

public

inte***ce visitor

具體訪問者角色(concrete visitor)

class

myvisitor

implements

visitor

}

class

othervisitor

implements

visitor

}

具體元素角色(concrete element)

class mysubject implements subject   

/**

* 這是核心:接收【指定的訪問者】來訪問咱自身的mysubject類的狀態或特徵

*/@override

public

void

accept(visitor visitor)

@override

public string getfield()

}

客戶端測試

public

class test

}

訪問者模式就是一種分離物件資料結構與行為的方法,通過這種分離,可達到為乙個被訪問者動態新增新的操作而無需做其它的修改的效果。

訪問者模式

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

訪問者模式

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

訪問者模式

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