| 所谓双分派是指不管类怎么变化,我们都能找到期望的方法运行。双分派意味着得到执行的操作取决于请求的种类和两个接收者的类型 |
| 假设我们要添加一个Wait的状态类,考察Man类和Woman类的反应,由于使用了双分派,只需增加一个Action子类即可在客户端调用即可,不需要改动任何其他类的代码 |
| # 添加如下 |
| package com.atguigu.visitor; |
| public class Wait extends Action { |
| |
| @Override |
| public void getManResult(Man man) { |
| |
| System.out.println(" 男人给的评价是该歌手待定 .."); |
| } |
| |
| @Override |
| public void getWomanResult(Woman woman) { |
| |
| System.out.println(" 女人给的评价是该歌手待定 .."); |
| } |
| |
| } |
| |
| # 测试 |
| package com.atguigu.visitor; |
| public class Client { |
| |
| public static void main(String[] args) { |
| |
| |
| ObjectStructure objectStructure = new ObjectStructure(); |
| objectStructure.attach(new Man()); |
| objectStructure.attach(new Woman()); |
| |
| Success success = new Success(); |
| objectStructure.display(success); |
| System.out.println("==============="); |
| Fail fail = new Fail(); |
| objectStructure.display(fail); |
| |
| System.out.println("=======给的是待定的测评========"); |
| Wait wait = new Wait(); |
| objectStructure.display(wait); |
| } |
| |
| } |
| 优点 |
| 1) 访问者模式符合单一职责原则、让程序具有优秀的扩展性、灵活性非常高 |
| 2) 访问者模式可以对功能进行统一,可以做报表、UI、拦截器与过滤器,适用于数据结构相对稳定的系统 |
| 缺点 |
| 1) 具体元素对访问者公布细节,也就是说访问者关注了其他类的内部细节,这是迪米特法则所不建议的, 这样造成了具体元素变更比较困难 |
| 2) 违背了依赖倒转原则。访问者依赖的是具体元素,而不是抽象元素 |
| 3) 因此,如果一个系统有比较稳定的数据结构,又有经常变化的功能需求,那么访问者模式就是比较合适的. |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-08-31 vue开发:前端项目模板