php 設計模式 之 訪問者模式

2021-06-28 01:15:01 字數 1331 閱讀 6343

訪問者模式實際上是讓外部類能夠獲取樹形結構的每個節點的物件,對每個物件進行操作的模式, 他能讓我們在不改動原有樹形結構的基礎上擴充套件功能。比如統計等等

在這種模式下,必須有的幾個要素:

1: 具體的元素物件, 訪問者實際要訪問的位置(即節點)

2: 穩定的樹形結構, 每個節點都是乙個元素物件, 一般在組合模式下比較多, 他提供了讓訪問者能夠進行訪問的實際位置(即訪問者訪問的是具體的樹形結構的某個節點的例項化物件):

3: 訪問者介面,這裡定義了訪問者的介面方法 , 這是個在每個節點都會用到的方法,用以節點處引用訪問者,從而使得訪問者能夠訪問當前節點

4: 訪問者的具體實現. 繼承了訪問者介面,以實現介面方法

(還可以加乙個要素: 元素的介面,對應 要點1)

要給不同使用者組的使用者新增不同的積分。

//定義元素介面

abstract class user

//這裡的accept方法用於把訪問者引入,在這個方法裡,($visitor)訪問者可以通過user類獲取需要的資料進而進行相應的操作

abstract function accept(uservisitor $vitor);

}//實現元素介面

class vipuser extends user

}class normaluser extends user

}//定義訪問者介面

abstract class uservisitor

//積分操作的訪問者實現

class pointactvisitor extends uservisitor

public function visitnormal(user $user)

}//使用者的樹形結構

class users

//讓所有的使用者都能被訪問者訪問

public function handlevisitor(uservisitor $visitor)

}}$pointvisitor = new pointactvisitor();

$users = new users();

$users->adduser(new vipuser()); //新增新使用者

$users->adduser(new normaluser());

$users->adduser(new normaluser());

$users->handlevisitor($pointvisitor); //執行pointactvisitor訪問者的操作

vip使用者+10分 

normal使用者+5分

normal使用者+5分

PHP設計模式 訪問者模式

宣告 本系列部落格參考資料 大話設計模式 作者程杰。訪問者模式 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。uml類圖 角色 1.抽象訪問者 state 為該物件結構中具體元素角色宣告乙個訪問操作介面。該操作介面的名字和引數標識了傳送訪問請...

PHP設計模式 訪問者模式

訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。抽象訪問者 class visitorstate abstract class visitorstate 抽象類,定義乙個accept操作 class element...

設計模式之訪問者模式

先看一下下面這段 class person public string getaction public void setaction string action public void getconclusion else if action exciting else if action gri...