现在的位置: 首页 > 综合 > 正文

php 访问者模式代码学习

2017年09月13日 ⁄ 综合 ⁄ 共 1575字 ⁄ 字号 评论关闭
abstract class Action {//visitor
	abstract public function GetManConclusion($person);
	abstract public function GetWomanConclusion($person);
}
class Success extends Action {
	public function GetManConclusion($person) {
		echo get_class($person) . " 背后多半有一个伟大的女人<br/>";//get_class,返回对象的类名
	}
	public function GetWomanConclusion($person) {
		echo get_class($person) . " 背后大多有一个不成功的男人<br/>";
	}
}
class Failing extends Action {
	public function GetManConclusion($person) {
		echo get_class($person) . " 大醉一场<br/>";
	}
	public function GetWomanConclusion($person) {
		echo get_class($person) . "哭的天翻地覆<br/>";
	}
}
class Marry extends Action{
	public function GetManConclusion($person){
		echo get_class($person)."结束了爱情游戏<br/>";
	}
	public function GetWomanConclusion($person){
		echo get_class($person)."找到了归属<br/>";
	}
}
abstract class Person {//elements
	abstract public function accept($action);
}
class Man extends Person {
	public function accept($action) {
		$action->GetManConclusion($this);
	}
}
class Woman extends Person {
	public function accept($action) {
		$action->GetWomanConclusion($this);
	}
}
class ObjectStructure {
	private $_elements = array ();
	public function attach($person) {
		$this->_elements[] = $person;
	}
	public function detach($person) {
		if ($key = array_search($person, $this->_elements) !== false)
			unset ($this->_elements[$key]);//销毁单个数组元素
	}
	public function accept($action) {
		foreach ($this->_elements as $element) {
			$element->accept($action);
		}
	}
}
//
$objOS = new ObjectStructure();
$objOS->attach(new Man());
$objOS->attach(new Woman());
$objCV1 = new Success();
$objCV2 = new Failing();
$objCV3 = new Marry();
$objOS->accept($objCV1);
$objOS->accept($objCV2);
$objOS->accept($objCV3);

输出结果:

Man 背后多半有一个伟大的女人

Woman 背后大多有一个不成功的男人

Man 大醉一场

Woman哭的天翻地覆

Man结束了爱情游戏

Woman找到了归属

抱歉!评论已关闭.