喵星软件园提供热门手机游戏下载,最新手机游戏攻略!

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
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
逆水寒手游被通缉解决方法
逆水寒手游被通缉解决方法

逆水寒手游游戏最近在游戏平台上架,在玩家圈

2023-07-16
卡丁车大乱斗好玩吗 卡丁车大乱斗玩法简介
卡丁车大乱斗好玩吗 卡丁车大乱斗玩法简介

期待已久的手游卡丁车大乱斗即将登陆,这款手

2023-08-04
最强蜗牛收藏家天赋开启位置介绍 天赋效果及加点攻略详解
最强蜗牛收藏家天赋开启位置介绍 天赋效果及加点攻略详解

玩家可以在最强蜗牛里面获取到很多不同的天

2020-07-21
暗黑破坏神4急救精通奖杯成就获得方法指南
暗黑破坏神4急救精通奖杯成就获得方法指南

小编近日在贴吧看到有许多玩家在暗黑破坏神

2023-06-10
2021年Steam最畅销游戏《永劫无间》成功进军海外的秘诀,
2021年Steam最畅销游戏《永劫无间》成功进军海外的秘诀,

全球爆火的永劫无间STEAM版上线 这次将掀起

2023-10-05
《最终幻想16》约书亚召唤兽是什么
《最终幻想16》约书亚召唤兽是什么

这一次给大家带来最终幻想16的《最终幻想16

2023-06-13