PHP设计模式-访问者 发表于 2017-04-09 | 分类于 PHP | 评论数: | 阅读次数: 本文字数: 1.3k | 阅读时长 ≈ 1 分钟 适用性 说说我对的策略模式和访问者模式的区分: 乍一看,其实两者都挺像的,都是实体类依赖了外部实体的算法,但是: 对于策略模式:首先你是有一堆算法,然后在不同的逻辑中去使用 对于访问者模式:实体的【结构是稳定的】,但是结构中元素的算法却是多变的,比如就像人吃饭这个动作 是稳定不变的,但是具体吃的行为却又是多变的 代码示例 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091/** * 动物接口 */interface AnimailInterface{ /** * 行为吃 * * @param VisitorInterface $visitor 访问者 * @return void */ public function eat(VisitorInterface $visitor);}/** * 实体人 * * 人吃饭的行为是不变的,但是吃什么是依照环境而定的 */class Person implements AnimailInterface{ /** * 行为吃 * 具体吃什么依照访问者而定 * * @param VisitorInterface $visitor 访问者 * @return void */ public function eat(VisitorInterface $visitor) { $visitor->eat(); }}/** * 访问者接口 */interface VisitorInterface{ /** * 行为吃 * * @return void */ public function eat();}/** * 访问者实体 * * 亚洲 */class VisitorAsia implements VisitorInterface{ /** * 行为吃 * * @return void */ public function eat() { echo "身处亚洲,所以主要吃大米咯~ \n"; }}/** * 访问者实体 * * 美洲 */class VisitorAmerica implements VisitorInterface{ /** * 行为吃 * * @return void */ public function eat() { echo "身处美洲,所以主要吃油炸食物咯~ \n"; }}// 生产一个人的实例$person = new Person();// 来到了亚洲$person->eat(new VisitorAsia());// 来到了美洲$person->eat(new VisitorAmerica());