java设计模式之访问者(二)-内嵌式访问者
内嵌式访问者模式
就是一棵树上的所有节点都有一个visit方法,每个父节点定义子节点的访问顺序。
因为访问逻辑都在节点内部,得名内嵌式访问者
下面展示一个demo,家谱是典型的树状结构,爷爷下面又爸爸和叔叔,爸爸下面又我和兄弟,依次访问。
public abstract class Node { abstract void visit(); } @Data @NoArgsConstructor public class GrandFather { private Father father; private Uncle uncle; public GrandFather(Father father, Uncle uncle) { this.father = father; this.uncle = uncle; } public void visit() { System.out.println("I am GrandFather!"); father.visit(); uncle.visit(); } } @Data @NoArgsConstructor public class Father extends Node { private Me me; private Brother brother; public Father(Me me, Brother brother) { this.me = me; this.brother = brother; } @Override void visit() { System.out.println("I am Father!"); me.visit();; brother.visit(); } } @AllArgsConstructor @Data public class Uncle extends Node { @Override void visit() { System.out.println("I am uncle!"); } } @AllArgsConstructor @Data public class Me extends Node { @Override void visit() { System.out.println("I am me!"); } } @Data public class Brother extends Node { @Override void visit() { System.out.println("I am brother!"); } }
执行访问
public class App { public static void main(String[] args) { GrandFather grandFather = new GrandFather(); Father father = new Father(); Uncle uncle = new Uncle(); Me me = new Me(); Brother brother = new Brother(); grandFather.setFather(father); grandFather.setUncle(uncle); father.setBrother(brother); father.setMe(me); grandFather.visit(); } }
展示结果
I am GrandFather! I am Father! I am me! I am brother! I am uncle!
这种内嵌式访问者模式业务逻辑和控制逻辑耦合在一起,在节点很多的时候修改维护都很困难,下面将介绍另外一种访问者模式
标签:
设计模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2021-08-17 java设计模式之责任链
2021-08-17 postman高级用法之pre-request
2021-08-17 SpringBoot读取Resource下文件的几种方式(转)