PHP设计模式—访问者模式
发布时间:2021-05-21 07:04:51 所属栏目:大数据 来源: https://www.jb51.cc
导读:? 定义: 访问者模式(Visitor): 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 ? 结构: Visitor: 抽象访问者,为该对象结构中ConcreteElement的每一个类声明一个Visit操作。 ConcreteV
? 定义:访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 ?结构:
?代码实例:/** * 抽象访问者 * Class VisitorState */ abstract class VisitorState { public $state_name; * * 得到男人的结论或反应 * @param ConcreteElementMan $concreteElementMan * @return mixed */ public function getManConclusion(ConcreteElementMan $concreteElementMan); * * 得到女人的结论或反应 * @param ConcreteElementWoman $concreteElementWoman * @return mixed function getWomanConclusion(ConcreteElementWoman $concreteElementWoman); } * * 抽象类,定义一个Accept操作 * Class ElementPerson ElementPerson { $type_name* * 接受 * @param VisitorState $visitorState * @return mixed function accept(VisitorState $visitorState* * 具体访问者,成功状态 * Class ConcreteVisitorSuccess class ConcreteVisitorSuccess extendsfunction __construct() { $this->state_name = '成功'; } ) { // TODO: Implement getManConclusion() method. echo "{$concreteElementMan->type_name}:{$this->state_name}时,背后多半有一个伟大的女人。<br/>" TODO: Implement getWomanConclusion() method. $concreteElementWoman->type_name}:{$this->state_name}时,背后大多有一个不成功的男人。<br/>"; } } * * 具体访问者,失败状态 * Class ConcreteVisitorFailing class ConcreteVisitorFailing $this->state_name = '失败'$this->state_name}时,闷头喝酒,谁也不用劝。<br/>"$this->state_name}时,眼泪汪汪,谁也劝不了。<br/>"* * 具体元素,男人 * Class ConcreteElementMan class ConcreteElementMan $this->type_name = '男人' TODO: Implement accept() method. $visitorState->getManConclusion($this); } } * * 具体元素,女人 * Class ConcreteElementWoman class ConcreteElementWoman $this->type_name = '女人'$visitorState->getWomanConclusion(* * 对象结构 * Class ObjectStructure ObjectStructure { $elements = []; * * 添加 * @param ElementPerson $elementPerson function add(ElementPerson $elementPerson) { $this->elements[] = * * 移除 * @param ElementPerson $elementPerson function remove(ElementPerson foreach ($this->elements as $key => $value) { if ($value == ) { unset($this->elements[$key]); } } } * * 查看显示 * @param VisitorState $visitorState function display(VisitorState $element) { $element->accept(); } } } 客户端调用 $objectStructure = new ObjectStructure(); 添加男人、女人 $objectStructure->add( ConcreteElementMan()); ConcreteElementWoman()); 成功时反应 $success = ConcreteVisitorSuccess(); $objectStructure->display($success); 失败时反应 $failing = ConcreteVisitorFailing(); $failing); 结果 男人:成功时,背后多半有一个伟大的女人。 女人:成功时,背后大多有一个不成功的男人。 男人:失败时,闷头喝酒,谁也不用劝。 女人:失败时,眼泪汪汪,谁也劝不了。 ? ? 总结:
? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |