码上见分晓!
中文版本的设计模式详解,案例中的代码尽量使用了中文.
以游戏和生活中较好理解的场景讲解设计模式的实际用法,便于理解吸收,让设计模式的学习不再困难!!!
更多设计模式欢迎来到我的开源项目设计模式中文版

https://gitee.com/nightrunner/chinese-version-of-design-patterns

/*** 访问者可以统计魔兽大部分单位!!!* PS:欢迎补充!*/
public class 访问者模式主程序 {public static void main(String[] args) {种族[] 种族 = new 种族[]{获取人族所有单位(),获取兽人所有单位(),获取暗夜精灵所有单位(),获取不死族所有单位(),获取中立所有单位()};种族访问者 种族访问者 = new 种族访问者();建筑访问者 建筑访问者 = new 建筑访问者();兵种访问者 兵种访问者 = new 兵种访问者();英雄访问者 英雄访问者 = new 英雄访问者();for (种族 各种族 : 种族) {各种族.接受访问(种族访问者);各种族.接受访问(建筑访问者);各种族.接受访问(兵种访问者);各种族.接受访问(英雄访问者);}System.out.println("魔兽争霸中共有:");System.out.printf("%s个种族%n", 种族访问者.数量);System.out.printf("%s种建筑%n", 建筑访问者.数量);System.out.printf("%s种英雄%n", 英雄访问者.数量);System.out.printf("%s种兵种%n", 建筑访问者.数量);}private static 种族 获取中立所有单位() {return new 种族("中立",new 建筑("酒馆",new 英雄("娜迦海妖"),new 英雄("黑暗游侠"),new 英雄("熊猫酒仙"),new 英雄("火焰领主", new 兵("小火人")),new 英雄("深渊领主"),new 英雄("地精修补匠", new 兵("小机器人")),new 英雄("炼金术士"),new 英雄("兽王", new 兵("豪猪"), new 兵("战鹰"))),new 建筑("地精实验室", new 兵("地精飞艇"), new 兵("伐木机器人"), new 兵("炸弹人")),new 建筑("雇佣兵营地", new 兵("黄皮"), new 兵("绿皮"), new 兵("小石头人"), new 兵("白胖子")),new 建筑("市场"),new 建筑("地精商店"),new 建筑("巨龙栖地"),new 建筑("泉水"),new 建筑("地精船坞"),new 建筑("传送门"));}private static 种族 获取不死族所有单位() {return new 种族("不死族",new 建筑("黑暗祭坛",new 英雄("死亡骑士"),new 英雄("恐惧魔王", new 兵("地狱火")),new 英雄("巫妖"),new 英雄("地穴领主", new 兵("腐尸甲虫"))),new 建筑("大墓地", new 兵("侍僧")),new 建筑("亡者大厅"),new 建筑("黑色城堡"),new 建筑("地穴", new 兵("食尸鬼"), new 兵("地穴恶魔"), new 兵("石像鬼")),new 建筑("屠宰场", new 兵("憎恶"), new 兵("绞肉车"), new 兵("黑曜石像"), new 兵("毁灭者")),new 建筑("诅咒神庙", new 兵("亡灵巫师", new 兵("骷髅法师"), new 兵("骷髅战士")), new 兵("女妖")),new 建筑("牺牲深渊", new 兵("阴影")),new 建筑("埋骨地", new 兵("冰霜巨龙")),new 建筑("坟场"), new 建筑("闹鬼金矿"), new 建筑("通灵塔"), new 建筑("幽魂之塔"),new 建筑("蛛网怪塔"), new 建筑("古墓废墟"));}private static 种族 获取人族所有单位() {return new 种族("人族",new 建筑("列王祭坛",new 英雄("大法师", new 兵("水元素")),new 英雄("山丘之王"),new 英雄("圣骑士"),new 英雄("血法师", new 兵("火凤凰"))),new 建筑("兵营", new 兵("步兵"), new 兵("火枪手"), new 兵("骑士")),new 建筑("神秘圣地", new 兵("牧师"), new 兵("女巫"), new 兵("破法者")),new 建筑("车间", new 兵("飞行器"), new 兵("迫击炮"), new 兵("攻城坦克")),new 建筑("狮鹫笼", new 兵("狮鹫"), new 兵("龙鹰")),new 建筑("城市大厅", new 兵("农民"), new 兵("民兵")),new 建筑("议政厅"),new 建筑("城堡"),new 建筑("伐木场"), new 建筑("神秘宝库"), new 建筑("铁匠铺"), new 建筑("箭塔"),new 建筑("哨塔"), new 建筑("神秘之塔"), new 建筑("炮塔"), new 建筑("农场"));}private static 种族 获取兽人所有单位() {return new 种族("兽人",new 建筑("风暴祭坛",new 英雄("剑圣"), new 英雄("先知",new 兵("幽灵之狼"), new 兵("恐惧之狼"), new 兵("暗影之狼")),new 英雄("牛头人酋长"),new 英雄("暗影猎手", new 兵("蛇棒"))),new 建筑("兵营",new 兵("兽人步兵"), new 兵("猎头者"), new 兵("狂暴猎头者"), new 兵("投石车")),new 建筑("灵魂归宿", new 兵("萨满祭司"), new 兵("巫医"), new 兵("灵魂行者")),new 建筑("兽栏",new 兵("狼骑兵"), new 兵("科多兽"), new 兵("双足飞龙"), new 兵("巨魔蝙蝠骑士")),new 建筑("牛头人图腾", new 兵("牛头人哦")),new 建筑("大厅", new 兵("苦工")),new 建筑("据点"),new 建筑("堡垒"),new 建筑("战争磨坊"), new 建筑("地洞"), new 建筑("瞭望塔"));}private static 种族 获取暗夜精灵所有单位() {return new 种族("暗夜精灵",new 建筑("长者祭坛",new 英雄("丛林守护者", new 兵("树人")),new 英雄("月之女祭司", new 兵("猫头鹰")),new 英雄("恶魔猎手"),new 英雄("守望者", new 兵("复仇天神"), new 兵("复仇之魂"))),new 建筑("生命之树", new 兵("小精灵")),new 建筑("岁月之树"),new 建筑("永恒之树"),new 建筑("战争古树", new 兵("弓箭手"), new 兵("女猎手"), new 兵("弩车")),new 建筑("风之古树",new 兵("猛禽德鲁伊"), new 兵("角鹰兽"), new 兵("精灵龙"), new 兵("角鹰骑士")),new 建筑("知识古树", new 兵("树妖"), new 兵("利爪德鲁伊"), new 兵("山岭巨人")),new 建筑("奇美拉栖树", new 兵("奇美拉")),new 建筑("远古守护者"), new 建筑("猎手大厅"), new 建筑("月井"), new 建筑("奇迹古树"));}
}interface 访问者 {void 访问(兵 兵);void 访问(建筑 建筑);void 访问(种族 种族);void 访问(英雄 英雄);
}abstract class 默认访问者 implements 访问者 {protected Integer 数量 = 0;@Overridepublic void 访问(建筑 建筑) {}@Overridepublic void 访问(英雄 英雄) {}@Overridepublic void 访问(兵 兵) {}@Overridepublic void 访问(种族 种族) {}
}class 建筑访问者 extends 默认访问者 {@Overridepublic void 访问(建筑 对象) {数量++;System.out.println("这是:" + 对象.getClass().getSimpleName() + ":" + 对象.获取名称() + ",这个第" + 数量 + "个");}
}class 英雄访问者 extends 默认访问者 {@Overridepublic void 访问(英雄 对象) {数量++;System.out.println("这是:" + 对象.getClass().getSimpleName() + ":" + 对象.获取名称() + ",这个第" + 数量 + "个");}
}class 兵种访问者 extends 默认访问者 {@Overridepublic void 访问(兵 对象) {数量++;System.out.println("这是:" + 对象.getClass().getSimpleName() + ":" + 对象.获取名称() + ",这个第" + 数量 + "个");}
}class 种族访问者 extends 默认访问者 {@Overridepublic void 访问(种族 对象) {数量++;System.out.println("这是:" + 对象.getClass().getSimpleName() + ":" + 对象.获取名称() + ",这个第" + 数量 + "个");}
}abstract class 魔兽单位 {private final String 名称;private final 魔兽单位[] 下级单位;public 魔兽单位(String 名称, 魔兽单位... 下级单位) {this.名称 = 名称;this.下级单位 = 下级单位;}public void 接受访问(访问者 访问者) {for (魔兽单位 魔兽单位 : 下级单位) {魔兽单位.接受访问(访问者);}}public String 获取名称() {return 名称;}
}class 种族 extends 魔兽单位 {public void 接受访问(访问者 访问者) {访问者.访问(this);super.接受访问(访问者);}public 种族(String 名称, 魔兽单位... 下级单位) {super(名称, 下级单位);}
}class 建筑 extends 魔兽单位 {public void 接受访问(访问者 访问者) {访问者.访问(this);super.接受访问(访问者);}public 建筑(String 名称, 魔兽单位... 下级单位) {super(名称, 下级单位);}
}class 英雄 extends 魔兽单位 {public 英雄(String 名称, 魔兽单位... 下级单位) {super(名称, 下级单位);}@Overridepublic void 接受访问(访问者 访问者) {访问者.访问(this);super.接受访问(访问者);}
}class 兵 extends 魔兽单位 {public 兵(String 名称, 魔兽单位... 下级单位) {super(名称, 下级单位);}@Overridepublic void 接受访问(访问者 访问者) {访问者.访问(this);super.接受访问(访问者);}
}

设计模式-访问者模式-java-中文版相关推荐

  1. 设计模式---访问者模式

    访问者模式 介绍 定义及使用场景 UML类图 角色 财务案例 个人心得体会 静态分派以及动态分派 静态分派 动态分派 访问者模式中的伪动态双分派 对访问者模式的一些思考 总结 优点 缺点 适用性 参考 ...

  2. 设计模式 访问者模式

    文章目录 访问者模式 访问者模式实战 访问者模式 在相同的数据结构下, 增加容易变化的业务访问逻辑, 为了增强扩展性, 将易变的访问逻辑进行解耦的一种设计模式. 访问者模式实战 模拟学校中, 有老师和 ...

  3. Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式

    Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...

  4. C++设计模式——访问者模式(visitor pattern)

    一.原理讲解 1.1意图 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 1.2应用场景 一个对象结构包含很多类对象,它们有不同的接口,而你 ...

  5. java设计模式---访问者模式

      Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自 己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广 泛,遵循一定的编程模式,才能使自 ...

  6. Java设计模式-访问者模式

    访问者模式   在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式.例如,电影或电视剧中的人物角色,不同的观众对他们的评价也不同:还有顾客在商场购物时放在&qu ...

  7. Windows环境下实现设计模式——访问者模式(JAVA版)

    我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows环境下如何编程实现访问者模式(设计模式). 不知道大家有没有这样的感觉,看了一大堆编程和设计模式的书,却还是很难理解设计模式, ...

  8. Java设计模式—访问者模式

    访问者模式 Visitor Pattern 1. 访问者模式概述 1.1 定义 1.2 结构 1.3 适用环境 2. 访问者模式应用案例 2.1 类图 2.2 代码实现 2.3 运行结果 3. 访问者 ...

  9. JAVA设计模式--访问者模式

    目录 一.什么是访问者模式 二.访问者模式的结构 三.访问者模式的适用性 四. 场景举例 五.访问者模式的特点 一.什么是访问者模式 访问者(Visitor)模式是一种对象的行为模式.在访问者模式里, ...

  10. 大话设计模式—访问者模式

    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元 ...

最新文章

  1. html背景音乐demo,music.html
  2. hive性能调优实战pdf_1分钟带你入门JVM性能调优,实战解析调优工具
  3. 【Linux shell】sed实践(2)
  4. python rs485_PySerial RS485读取
  5. 【UOJ#188】Sanrd(min_25筛)
  6. python能处理图片吗_python 能处理图像?
  7. vue实现上下滑动翻页_vue 实现滚动到底部翻页效果(pc端)
  8. 如何使mysql编码格式_Mysql设置编码方式及基本操作
  9. 原理 rpm_图文详解,微型直流电机的工作原理
  10. 机器博弈 (一) 入门简介
  11. Linux下配置静态IP地址,设置DNS和主机名
  12. 祝福 Stephan Ewen,Apache Flink 将继续前行 !
  13. note8 升级android9,明年升!三星七大旗舰集体获安卓9.0认证:这阵容赢了!
  14. 如何使用jmeter录制脚本
  15. matlab 光谱共聚焦,激光共焦显微拉曼光谱分析实验数据处理及谱图解析
  16. HTML文本框不能复制粘贴,word文本框无法复制粘贴
  17. 搜狗浏览器 中文显示乱码
  18. 在socket 中使用域名
  19. 3星|《混乱》:案例比较有趣,推导过程和结论略牵强
  20. 集成聚合火车票订票接口(回调推送方式)总结

热门文章

  1. echarts 词云图
  2. js代码在调试状态执行正确,但是正常使用时没有反应
  3. (1)电源管理-S3C2440芯片电源管理模块解析
  4. 动态拼接Lambda表达式2
  5. 物联网安全漏洞有哪些
  6. qpython 3h_QPython 3H
  7. Java对接微信开放平台详解
  8. mysqldump 中参数 --set-gtid-purged 控制 SET @@GLOBAL.GTID_PURGED和 SET @@SESSION.SQL_LOG_BIN
  9. 8g内存和16g内存区别 mac_内存不重要?8G内存和16G内存的M1 MacBook Pro性能对比
  10. 8081端口被nexus占用的情况如何解决