php設(shè)計(jì)模式 Visitor 訪問(wèn)者模式
更新時(shí)間:2011年06月28日 20:57:17 作者:
表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作,可以在不改變各元素的類的前提下定義作用于這些元素的新操作
復(fù)制代碼 代碼如下:
<?php
/**
* 訪問(wèn)者模式
*
* 表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作,可以在不改變各元素的類的前提下定義作用于這些元素的新操作
*
*/
abstract class Visitor
{
abstract public function visitCroncreteElementA($element);
abstract public function visitCroncreteElementB($element);
}
class ConcreteVisitor1 extends Visitor
{
public function visitCroncreteElementA($element)
{
echo get_class($element)." visit 1A<br/>";
}
public function visitCroncreteElementB($element)
{
echo get_class($element)." visit 1B<br/>";
}
}
class ConcreteVisitor2 extends Visitor
{
public function visitCroncreteElementA($element)
{
echo get_class($element)." visit 2A<br/>";
}
public function visitCroncreteElementB($element)
{
echo get_class($element)." visit 2B<br/>";
}
}
abstract class Element
{
abstract public function accept($visitor);
}
class ConcreteElementA extends Element
{
public function accept($visitor)
{
$visitor->visitCroncreteElementA($this);
}
}
class ConcreteElementB extends Element
{
public function accept($visitor)
{
$visitor->visitCroncreteElementB($this);
}
}
class ObjectStructure
{
private $_elements = array();
public function attach($element)
{
$this->_elements[] = $element;
}
public function detach($element)
{
if($key = array_search($element,$this->_elements) !== false) unset($this->_elements[$key]);
}
public function accept($visitor)
{
foreach($this->_elements as $element)
{
$element->accept($visitor);
}
}
}
//
$objOS = new ObjectStructure();
$objOS->attach(new ConcreteElementA());
$objOS->attach(new ConcreteElementB());
$objCV1 = new ConcreteVisitor1();
$objCV2 = new ConcreteVisitor2();
$objOS->accept($objCV1);
$objOS->accept($objCV2);
您可能感興趣的文章:
- Java 的雙重分發(fā)與 Visitor 模式實(shí)例詳解
- C#設(shè)計(jì)模式之Visitor訪問(wèn)者模式解決長(zhǎng)隆歡樂世界問(wèn)題實(shí)例
- 實(shí)例講解iOS應(yīng)用的設(shè)計(jì)模式開發(fā)中的Visitor訪問(wèn)者模式
- 學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)訪問(wèn)者模式(Visitor)
- Java設(shè)計(jì)模式之訪問(wèn)模式(Visitor者模式)介紹
- C++的命名空間詳解
- C++基于OpenCV實(shí)現(xiàn)手勢(shì)識(shí)別的源碼
- C++內(nèi)存模型和名稱空間詳解
- 淺談 C++17 里的 Visitor 模式
相關(guān)文章
利用PHP制作簡(jiǎn)單的內(nèi)容采集器的原理分析
采集器,通常又叫小偷程序,主要是用來(lái)抓取別人網(wǎng)頁(yè)內(nèi)容的。關(guān)于采集器的制作,其實(shí)并不難,就是遠(yuǎn)程打開要采集的網(wǎng)頁(yè),然后用正則表達(dá)式將需要的內(nèi)容匹配出來(lái),只要稍微有點(diǎn)正則表達(dá)式的基礎(chǔ),都能做出自己的采集器來(lái)的。2008-10-10php無(wú)限級(jí)評(píng)論嵌套實(shí)現(xiàn)代碼
本文講的是php無(wú)限級(jí)評(píng)論嵌套實(shí)例介紹, 我在設(shè)計(jì)BB的過(guò)程中,也一直在思考是否可以不通過(guò)遞歸來(lái)實(shí)現(xiàn)無(wú)限級(jí)分類的結(jié)構(gòu)展現(xiàn)和父子結(jié)構(gòu)查找,因?yàn)槿绻粚?duì)這里的算法進(jìn)行優(yōu)化后果可能是致命的2018-04-04php中將數(shù)組存到文件里的實(shí)現(xiàn)代碼
php的數(shù)組十分強(qiáng)大,有些數(shù)據(jù)不存入數(shù)據(jù)庫(kù)直接寫到文件上,用的時(shí)候直接require2012-01-01php中使用臨時(shí)表查詢數(shù)據(jù)的一個(gè)例子
使用臨時(shí)表查詢數(shù)據(jù)的一個(gè)例子,供大家學(xué)習(xí)參考2013-02-02PHP單例模式模擬Java Bean實(shí)現(xiàn)方法示例
這篇文章主要介紹了PHP單例模式模擬Java Bean實(shí)現(xiàn)方法,涉及php面向?qū)ο蟪绦蛟O(shè)計(jì)相關(guān)操作技巧,需要的朋友可以參考下2018-12-12php項(xiàng)目中類的自動(dòng)加載實(shí)例講解
在本篇文章里小編給大家整理的是關(guān)于php項(xiàng)目中類的自動(dòng)加載的實(shí)例內(nèi)容以及相關(guān)代碼,需要的朋友們學(xué)習(xí)下。2019-09-09