`
fujohnwang
  • 浏览: 156240 次
社区版块
存档分类
最新评论

PACMAN项目中的编码反模式

阅读更多

这一阵子正在处理一个jira issue, 不得不去抠原来的一些代码,加上原来做code review的一些条目,决定促成这篇blog文章。

以下的一些“所谓的”代码模式(或者说编码模式)都节选自PACMAN项目,但并不意味着它们仅存在于PACMAN项目中, 实际上,如果我们细心观察的话,许多地方都能发现这些似曾相识的代码模式,这段文字权当“抛砖引玉”,希望帮助大家发现并进而改进现有的或者可能存在的一些编码过程中的反模式。

Note
[Note]

实际上,这里的许多代码都可以工作,但作为一个perfectionist,某些瑕疵也是无法容忍的,或许这属于做事方式的不同,并没对错之分, 所以,以下观点仅属于个人观点,如果有有失偏颇之处,还请各位看官海涵则个...

确切的讲,这个案例不应该算是PACMAN的,PACMAN仅仅是个“受害者”。 PACMAN中用到一个组件叫做Blotter,这个Blotter可不一般,按小蒯的说法, “那简直是所有bug的根源”,小蒯用了两年这个组件当然是感同身受了,我还没咋摸清出这个blotter的习性,所以,不做太多评论,毕竟,这个组件也早就停止开发了, 挖太多的“陈谷子烂芝麻”出来也没太大意思,就挑一个第一眼看上去就印象深刻的来说吧!

Blotter说白了就是一个Swing的JTable的替代品,我不知道当时开发这个组件的Team是如何想的,或者是否真的遇到了某些问题,而必须要用一个泛泛的全局的事件管理器来管理blotter的几乎所有事件,从表格的选取到相关的一些资源释放的事件,全部使用同一个类来管理。 在Blotter中,要监听Blotter的事件,那么,用String型的key来标注事件类型,然后注册到全局的ApplicationActionManager上去:

String actionName = ...;
ApplicationActionManager.getInstance().subscribeToAction(actionListener, actionName);
				

其中, actionListener是一个ApplicationActionListener实例,在这个actionListener中,你可以根据你注册的actionName来监听自己感兴趣的事件:

public class YourActionListener implements ApplicationActionListener

    public void doAction(final String actionName, final Object obj) {
		if (StringUtils.equals(actionName, Blotter.SELECTION_ACTION)
			&& (obj == settlementViewBlotter)) {
			...
		}
		if (obj == financeViewBlotter) {
		    if (StringUtils.contains(actionName, ApplicationActionManager.VIEW_CHANGED)) {
			...
		}
    }
    
    public void subscribeToActions() {}

}
				

即使是Table相关的事件,你依然需要如此,对于TableSelection之类事件来说,在Blotter里面,简直就是“生不如死”啊,一点儿存在的价值都没有,呵呵。 有强类型的,细粒度的事件监听器不用,转而使用宽泛的没有类型安全保证的模型, 真不知道该说是进步那还是倒退那!

评论

相关推荐

    Berkeley-PacMan:伯克利的AI PacMan项目

    在Berkeley-PacMan项目中,Python被用来编写控制吃豆人行动的AI代理。这个项目旨在让学生了解并实践搜索算法、状态空间建模、决策制定以及多智能体系统等AI核心概念。 1. **搜索算法**:在游戏环境中,吃豆人需要...

    AI项目-pacman

    在AI领域,"AI项目-pacman"是一个经典的实践案例,它通过模拟吃豆人游戏来教授和应用搜索算法。在这个项目中,我们主要关注的是如何让吃豆人智能地找到最优路径来解决游戏中的问题。这里涉及的关键技术包括A*算法和a...

    Go-Pacman经典的Pacman游戏拥有程序生成无限垂直迷宫

    在Pacman中,玩家的键盘输入将决定Pacman的移动方向。 总结,Go-Pacman项目展示了如何利用Go语言的特性和社区资源来开发一个经典的游戏,通过程序生成无限垂直迷宫增加了游戏的多样性和挑战性。理解并实践这个项目...

    77--[食豆人 pacman].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    77--[食豆人 pacman].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码77--[食豆人 pacman].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码77--[食豆人 pacman].zip源码scratch2.0 3.0编程项目...

    pacman中文手册 包管理器

    此操作允许用户修改pacman数据库中已安装包的特定属性,如安装理由。 - `-Q, --query`:查询包数据库。可用于查看已安装包的信息,包括文件列表、依赖关系、冲突、安装日期、创建日期和大小。 - `-R, --remove`:从...

    pacman_pacmanai_

    通过分析和理解这段代码,开发者不仅可以掌握Pacman AI的基本工作原理,还能深入了解人工智能在游戏开发中的应用,为自己的AI项目积累宝贵的经验。无论是对游戏编程爱好者还是对AI研究者来说,这都是一次富有挑战和...

    matlab开发-Pacman

    - 在MATLAB中,你可以编写算法来控制幽灵的行为模式,如随机移动、追踪Pacman等。这可能涉及到路径规划算法,如A*搜索或Dijkstra算法。 6. **自定义关卡**: - 创建新的迷宫关卡可能需要设计一个地图编辑器或者...

    archlinux pacman gui (simple)

    为了简化这一过程,"archlinux pacman gui (simple)"项目应运而生,它使用Python编程语言构建了一个图形化界面,让用户在没有太多终端操作经验的情况下也能方便地管理软件。 这个项目的核心在于将Pacman的命令行...

    PACMAN游戏源代码完整版

    4. **AI算法**:PACMAN中的鬼魂有各自的AI,它们根据一定的策略追踪PACMAN。这可能涉及到路径规划算法,如A*搜索,或者更简单的行为模式,如追逐、徘徊或逃跑。 5. **用户输入处理**:PACMAN会响应用户的键盘输入来...

    人工智能大作业pacman满分代码

    在本项目中,“人工智能大作业pacman满分代码”是一个典型的基于人工智能实现的游戏——Pacman(吃豆人)的代码实现。这个项目旨在让学生理解和应用人工智能基础理论,特别是搜索算法,来控制Pacman在迷宫中寻找食物...

    人工智能作业pacman吃豆人python源代码

    总的来说,"人工智能作业pacman吃豆人python源代码"这个项目为我们提供了一个生动的AI实践案例,它结合了理论与实践,让学习者能够在解决实际问题的过程中掌握AI的精髓。通过分析和理解这个项目,我们可以更好地了解...

    pacman程序加源代码加图片音乐

    在提供的压缩包文件中,"Pacman"很可能是包含整个项目的所有文件,包括源代码、资源文件(如图片和音乐)。源代码部分可能有多个类,如游戏主类、角色类(Pacman、鬼魂、动漫角色)、迷宫类、用户交互类等,每个类都...

    PACMAN吃豆人

    7. **游戏逻辑**:幽灵的行为模式、PACMAN的特殊能力(如吃下能量丸后能反追幽灵)等游戏规则都需要通过编程实现。 8. **声音效果**:VB6可以集成声音播放,增强游戏体验。当PACMAN吃到食物或被幽灵捉到时,可以...

    伯克利大学人工智能(AI)吃豆人(Pacman)源码

    在这个项目中,吃豆人游戏被用来作为测试AI策略的平台,让学生在实践中理解和掌握AI的核心概念。 首先,让我们来了解一下Python 2.7版本的重要性。Python是一种广泛使用的编程语言,特别适合初学者和专业人士进行...

    pacman-master_PacManHard_

    《Pacman游戏在Java中的实现详解》 "Pacman-master_PacManHard_"是一个关于使用Java编程语言实现的经典游戏——吃豆人(Pac-Man)的项目。该项目名为"PacManHard",暗示了这是一个难度升级的版本,可能包含了更复杂...

    pacman2-少儿编程scratch项目源代码文件案例素材.zip

    在"pacman2-少儿编程scratch项目源代码文件案例素材.zip"这个压缩包中,我们找到了一个名为"62-pacman2.sb2"的文件,这正是基于Scratch的Pacman游戏项目源代码。本文将详细解析该项目,帮助读者深入理解Scratch编程...

    Pacman:UCB的Pacman项目解决方案,它是有关人工智能和机器学习的一些基本算法的培训

    吃豆子UCB的Pacman项目解决方案,它是有关人工智能和机器学习的一些基本算法的培训

    吃豆人-PacMan.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码

    吃豆人-PacMan.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码吃豆人-PacMan.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码吃豆人-PacMan.zipscratch2.0 3.0编程项目源文件源码经典游戏...

    PacMan Game

    PacMan游戏 绝对经典 源代码的一部分

    HTML5 pacman

    在HTML5 Pacman中,主要运用了以下技术: 1. **Canvas元素**:Canvas是HTML5中一个重要的图形绘制区域,通过JavaScript进行编程,可以动态地创建图像、动画和游戏。在这个游戏中,所有的角色(包括Pacman、幽灵和...

Global site tag (gtag.js) - Google Analytics