当前位置: 首页 > 后端技术 > PHP

访问者模式(Visitor)PHP设计模式代码实例(32)

时间:2023-03-29 20:11:07 PHP

目的访问者模式允许你将对象操作外包给其他对象。这样做的主要原因是关注点分离(数据结构和数据操作)。但是被访问的班级必须签订合同来接受访问者。(详见示例中的Role::accept方法。)契约可以是抽象类或接口。在这种情况下,每个访问者必须自己选择调用访问者的哪个方法。UML图★官方PHP进阶学习交流社区“点击”管理整理部分资料,BAT等一线大厂准备进阶知识体系(相关学习资料及笔试面试题)且不限于:分布式架构、高扩展、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等知识点进阶干货代码RoleVisitorInterface。phpvisited[]=$role;}publicfunctionvisitUser(User$role){$this->visited[]=$role;}/***@returnRole[]*/publicfunctiongetVisited():array{return$this->visited;}}Role.phpname=$name;}公共赋nctiongetName():string{returnsprintf('User%s',$this->name);}publicfunctionaccept(RoleVisitorInterface$visitor){$visitor->visitUser($this);}}Group.phpname=$name;}publicfunctiongetName():string{returnsprintf('Group:%s',$this->name);}publicfunctionaccept(RoleVisitorInterface$visitor){$visitor->visitGroup($this);}}测试Tests/VisitorTest.phpvisitor=newVisitor\RoleVisitor();}publicfunctionprovideRoles(){return[[newVisitor\User('Dominik')],[newVisitor\Group('Administrators')],];}/***@dataProviderprovideRoles**@paramVisitor\Role$role*/publicfunctiontestVisitSomeRole(Visitor\Role$role){$role->accept($this->visitor);$this->assertSame($role,$this->visitor->getVisited()[0]);}}PHP互联网架构师成长之路*《设计模式》终极指南PHP互联网架构师50K成长指南+行业解题大纲(持续更新中)面试10家公司,拿到9个offer,2020年PHP面试题★如果你喜欢我的文章,想与更多资深开发者交流学习,获得更多各大厂商面试相关技术咨询指导,欢迎加入我们的群,密码:phpzh2020最新PHP进阶教程,全系列!如果内容不错,希望大家多多支持鼓励点赞/点赞,欢迎一起交流;另外,如果大家有什么问题,建议,可以在评论中提出你们想看的内容