TheVisitor好玩吗 TheVisitor玩法简介,
时间:2023-10-05 09:31:41
来源:
浏览:
设计模式:行为类之访问者模式(Visitor)意图场景和代码示例
导引
本篇快速地讲解一下设计模式中行为类的访问者模式(Visitor Pattern),快速来掌握一下其意图场景及代码结构模式。
模式意图
对于某个对象或者一组对象,不同的访问者,产生的结果不同,执行操作也不同。此时,就是访问者模式的典型应用了。满足在不改类层次结构的条件下,对该层次类进行扩展。
应用场景
1. 不同的子类,依赖于不同的其他对象;
2. 需要对一组对象,进行许多不相关的操作,又不想在类中是现在这些方法;
3. 定义的类很少改变,但是执行的操作却经常发生改变。
模式结构
代码构成
Context 环境角色
class Context{ List<Node> list = new ArrayList(); public void add(Node node) { list.add(node); } public void visit(Visitor visitor) { for(Node node : list){ node.accept(visitor); } }}
Visitor 访问者角色
interface Visitor{ public void visit(NodeA nodeA); public void visit(NodeB nodeB);}class VisitA implements Visitor{ public void visit(NodeA nodeA){ System.out.println("***visitA***"); nodeA.action(); } public void visit(NodeB nodeB){ System.out.println("***visitA***"); nodeB.action(); }}class VisitB implements Visitor{ public void visit(NodeA nodeA){ System.out.println("***visitB***"); nodeA.action(); } public void visit(NodeB nodeB){ System.out.println("***visitB***"); nodeB.action(); }}
Node 被访问角色
interface Node{ public void accept(Visitor visitor);}class NodeA implements Node{ public void accept(Visitor visitor) { visitor.visit(this); } public void action(){ System.out.println("NodeA visited"); }}class NodeB implements Node{ public void accept(Visitor visitor) { visitor.visit(this); } public void action(){ System.out.println("NodeB visited"); }}
完整代码
package com.nd.test.design.visitor; import java.util.ArrayList; import java.util.List; interface Visitor{ public void visit(NodeA nodeA); public void visit(NodeB nodeB); } class VisitA implements Visitor{ public void visit(NodeA nodeA){ System.out.println("***visitA***"); nodeA.action(); } public void visit(NodeB nodeB){ System.out.println("***visitA***"); nodeB.action(); } } class VisitB implements Visitor{ public void visit(NodeA nodeA){ System.out.println("***visitB***"); nodeA.action(); } public void visit(NodeB nodeB){ System.out.println("***visitB***"); nodeB.action(); } } interface Node{ public void accept(Visitor visitor); } class NodeA implements Node{ public void accept(Visitor visitor) { visitor.visit(this); } public void action(){ System.out.println("NodeA visited"); } } class NodeB implements Node{ public void accept(Visitor visitor) { visitor.visit(this); } public void action(){ System.out.println("NodeB visited"); } } class Context{ List<Node> list = new ArrayList(); public void add(Node node) { list.add(node); } public void visit(Visitor visitor) { for(Node node : list){ node.accept(visitor); } } } public class Client { private static Context ctx = new Context(); public static void main(String<> args) { ctx.add(new NodeA()); ctx.add(new NodeB()); ctx.visit(new VisitA()); ctx.visit(new VisitB()); } }
运行结果参考如下:
***visitA***NodeA visited***visitA***NodeB visited***visitB***NodeA visited***visitB***NodeB visited
总结
本篇是设计模式的最后一篇,也是头条号 @牛旦教育IT课堂 2018年的最后一篇技术文章。
本文主要介绍了访问者模式的意图场景和参考示例。其主要是允许对组合结构加入新的的操作,而无需改变结构本身,且加入新操作相对容易。
好了,就说这么多了。祝各位潇潇洒洒挥别过去,开开心心迈向未来!
面向2019年,@牛旦教育IT课堂 继续为你带来更多技术创作和思考分享。
标题:TheVisitor好玩吗 TheVisitor玩法简介,
链接:https://www.miaoshengapp.cn/yxgl/125100.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
热门手游
更多
热门攻略
-
TheVisitor好玩吗 TheVisitor玩法简介, 2023-10-05
-
TheVisitor什么时候出 公测上线时间预告,the visitor第一关怎么玩 2023-10-05
-
TheRamp什么时候出 公测上线时间预告,the ramp下载 2023-10-05
-
ThePiratesKingdoms官网在哪下载 最新官方下载安装地址, 2023-10-05
-
ThePauseChallenge什么时候出 公测上线时间预告, 2023-10-05
-
ThePatrioticWar官网在哪下载 最新官方下载安装地址, 2023-10-05
-
TheOfficeSomehowWeManage官网在哪下载 最新官方下载安装地址, 2023-10-05
热游排行榜