设计模式学习笔记-访问者模式

我对访问者模式的理解是,对于同一个对象或者数据源,由访问者决定这个对象的处理方式或者数据呈现模式。最简单的,对于同样销售数据,对销售者而言,它可能需要知道的是自己的销售多少商品,获得了多少钱,但对老板而言,它需要这份销售记录整理出,每种商品的增长趋势,以决定未来的销售策略。

代码如下:

interface IVistor{
	public function visit(IData  $dataObj);
}

class Boss implements IVistor{
	public function visit(IData $dataObj){
		$data = $dataObj->Data();
		foreach($data as $val){
			echo "<br>boss visit {$val}<br>";
		}
	}
}

class Manager implements IVistor{
	public function visit(IData $dataObj){
		$data = $dataObj->Data();
		foreach($data as $val){
			echo "<br>Manager visit {$val}<br>";
		}
	}
}

abstract class IData { //访问接收者(数据源)
	public function accept(IVistor $visitor){
		$visitor->visit($this); //重点,由点像策略
	}
	public abstract function Data();
}

class DayData extends IData{
	public function Data(){
		return ["1号数据", "2号数据", "3号数据", "4号数据"];
	}
}

$Boss = new Boss();
$Manager = new Manager();
$Data = new DayData();

//同一份数据,不同的访问者,以不同的方式处理和呈现
$Data->accept($Boss);
$Data->accept($Manager);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值