Note: First posted on about 2005年3月
/*
* @Just for fun.
*/
---------------------------------------------------
篮球中的坏味道
<o:p></o:p>
= 初始化问题 = <o:p></o:p>
<o:p></o:p>
打半场开始之前当然要热身啦,上次俺就是没热身出现exception--扭了脚,到现在还痛呢,555… <o:p></o:p>
Solution: 不言自明。 <o:p></o:p>
注: 为避免没初始化,常伴有大量 if(xx==null) 之类语句出现,该问题主要是把null错看成对象的缺省值。解决此问题的一个技巧是引入一“NullObject”作为其缺省值,即把对没初始化对象的调用转换为对这个“NullObject”缺省对象方法的调用,这样便可消除这些冗余的 if(xx==null)。 <o:p></o:p>
<o:p></o:p>
= Long Method = <o:p></o:p>
刷刷刷,一连串的动作,帅呆了(当然是在说俺啦)。 <o:p></o:p>
“怎么做的,教小弟。” <o:p></o:p>
“OK。看着,先运过去,再运过来,再这样,再……” <o:p></o:p>
“@#%*…” <o:p></o:p>
真笨,教了几十遍,他还是没学会… <o:p></o:p>
“这样吧,换个教法,把动作分解,先来个crossover,再…” <o:p></o:p>
真聪明,两三下就学会了!!! <o:p></o:p>
“原来这么简单,一下就会了嘛,怎么不是说?” <o:p></o:p>
“谁叫你不早问!”(似乎流行这么回答) <o:p></o:p>
<o:p></o:p>
Solution: 先在这个方法体中加上注释,然后将每个注释块提出为一个方法,就这么简单。 <o:p></o:p>
注: Large Class等也可用类似作法。 <o:p></o:p>
<o:p></o:p>
= Long Parameter List = <o:p></o:p>
<o:p></o:p>
为写一篇关于篮球的文章(够无聊的吧)。需要一些数据,如篮球的质量,体积,弹性系数等。你没必要把这些数据一一后告诉俺,只要抱加一个篮球给俺,这些数据自然就搞定了。 <o:p></o:p>
<o:p></o:p>
Solution: 如果这几个参数组合在一起有意义,引进一个对象,使其持有这几个参数,然后使这个对象成为此方法的参数,并对该方法作相应的修改。 <o:p></o:p>
注: 可能会增加类之间的耦合。 <o:p></o:p>
<o:p></o:p>
= Primitive Obsession = <o:p></o:p>
<o:p></o:p>
NBA中,一支球队有个属性表示战绩。一开始,为简单起见,可能用一个String对象表示,如”12:<st1:chmetcnv w:st="on" tcsc="0" unitname="”" sourcevalue="7" numbertype="1" negative="False" hasspace="False">7”</st1:chmetcnv>。但如果因需要还得让它能表示胜率,排名等,乍办?解决方案是设计一个战绩对象,使它持有胜、负、胜率、排名等属性,这样就清晰明了了。 <o:p></o:p>
<o:p></o:p>
Solution: 将那些primitive or near-primitive types改成有意义的对象。 <o:p></o:p>
注: 面向对象就是要面向对象。 <o:p></o:p>
<o:p></o:p>
= Feature Envy = <o:p></o:p>
<o:p></o:p>
俺有许多必杀技,其中有一技就是,听好了,那就是叫小王先crossover,再变向,再急停…。咦,怎么都是小王?唉,这个必杀技不关俺的事,给小王算了。 <o:p></o:p>
<o:p></o:p>
Solution: 如果一方法总是调用其他某个对象的方法,就把该方法移到相应的对象中去。 <o:p></o:p>
注: 有时候出现这种情况是有道理的,如策略模式和访问者模式。 <o:p></o:p>
<o:p></o:p>
= Divergent Change = <o:p></o:p>
<o:p></o:p>
一次比赛,俺当裁判,吹哨,记分,记时俺都一人包办。半场下来,因来回奔波累得不成人样,还因忙不过来吹了不少“黑哨”。于是,又找来两人,一人记分记时,另一人和俺各管半场。呵呵,果然下半场轻松加愉快,而且几乎没有误判,不过俺的工资减了一半… <o:p></o:p>
<o:p></o:p>
Solution: 如果有多种原因使得一个对象改变,就说明这个对象责任过多,得减减负(三减?)。可将该对象按需求分解为多个对象。 <o:p></o:p>
注: A module should have only one secret. <o:p></o:p>
<o:p></o:p>
= Shotgun Surgery = <o:p></o:p>
<o:p></o:p>
这次比赛,俺和小王两人当主裁,两个主裁,没搞错吧,不用急,还有更离谱的呢,那就是俺吹哨,小王负责做犯规手势,有创意吧!不过分工似乎太“明确”了吧。呵呵。 <o:p></o:p>
<o:p></o:p>
Solution: 如果一个简单的改变牵涉到几个对象,也就是说一件事的责任被分散到几个对象中,这时,你要做的就是从这些对象中提取出这整件事,然后对其他对象作相应的调整,这可能使几个对象合并成一个对象。 <o:p></o:p>
注: 当然也有特例,如观察者模式中的模型与视图,这是因为视图和模型通常需要独自的改变。 <o:p></o:p>
<o:p></o:p>
参考书目 <<Refactoring Workbook>> <o:p></o:p>
<<Refactoring>> <o:p></o:p>
<o:p></o:p>
不当之处,敬请指出。 <o:p></o:p>
<o:p> </o:p>
分享到:
相关推荐
"篮球基本功训练对提高中学生篮球兴趣重要性的研究"这一主题揭示了篮球基础训练在激发和维持中学生篮球爱好中的关键作用。 首先,我们要理解篮球基本功的重要性。基本功包括控球、传球、投篮、防守和移动等基础技巧...
篮球场地的规划与设计在体育设施建设中至关重要,特别是在专业或半专业级别的篮球比赛中。CAD(Computer-Aided Design)技术在这一领域中起到了关键作用,它能够精确地绘制出篮球场地的尺寸图,确保场地符合国际篮球...
通过介绍参与篮球运动对增强体质、提高心肺功能、促进骨骼和肌肉发育、培养团队精神和竞争意识等方面的积极影响,篮球校本课程不仅教会学生篮球技能,更强调了体育运动在促进学生身心健康中的重要作用。 安全教育在...
街头篮球体现了篮球的自由精神和个性表达,而三人篮球则融合了竞技性和娱乐性,成为国际体育赛事中的重要组成部分。无论你是喜欢自由发挥的街头风格,还是热衷于竞技激烈的三人对决,都能在篮球的世界里找到属于自己...
在这个篮球比赛计分器的课程设计中,EDA技术被巧妙地应用到篮球比赛的计分系统中,实现了对比赛过程中的进球得分和倒计时功能的精确控制。 **1. EDA技术基础** EDA技术是通过计算机软件工具来辅助电子系统的设计和...
街头篮球PAK解包程序与WinUnFSPak 0.98是针对热门网络游戏《街头篮球》(Freestyle)的资源管理工具,主要用于处理游戏中的PAK文件。PAK文件是一种常见的数据打包格式,通常用于存储游戏的音效、图片、动画等资源,...
篮球比赛计分器是一种用于记录篮球比赛中两队得分情况的设备。在电子技术与软件编程领域,设计一个篮球比赛计分器涉及到多个知识点,其中包括硬件开发、嵌入式系统、模拟电路、数字电路以及人机交互界面等。下面将...
本篇论文探讨了人工智能技术在篮球运动中的多种应用,包括视频分析、视频剪辑、大数据分析及智能训练机器人等方面。以下是对标题、描述和部分内容中的知识点的详细分析: 首先,人工智能在篮球视频分析中的应用是一...
为了更好地服务篮球爱好者,播放器提供了一系列篮球主题的音乐推荐,根据用户的听歌习惯,智能推荐适合在打篮球时收听的音乐,帮助用户在运动中保持激情和活力。此外,播放器还集成了篮球赛事信息和球员数据,用户在...
文档标题和描述中提到的是关于“江苏省宜兴市中小学篮球运动发展现状”的一项调查研究,这涉及体育教育、青少年健康以及学校体育课程设置等多个方面。在这个主题下,我们可以探讨以下几个重要的知识点: 1. **体育...
该数据集的核心在于其包含了大量的篮球场景图片,这些图片中包含了丰富的人体姿态和篮球运动的信息。通过深入研究这个数据集,我们可以了解到以下几个关键知识点: 1. **数据集构建**:构建这样的数据集需要大量的...
篮球数据集是一个专门为计算机视觉和人工智能领域中的目标检测任务设计的资源。这个数据集包含了大量与篮球相关的图像,这些图像通常被用来训练机器学习或深度学习模型,以便它们能够识别和定位图像中的篮球。目标...
在这个“Unity3D街头篮球游戏源代码”项目中,你将有机会深入理解如何利用Unity3D来构建一个生动、有趣且具有竞技性的篮球游戏。 首先,源代码中的每个部分都可能包含以下关键知识点: 1. **游戏对象与场景**:在...
【篮球游戏在幼儿园体育活动中的应用】 篮球游戏在幼儿园体育活动中扮演着重要角色,它能够促进幼儿的身体健康发展,提高他们的协调性和团队合作能力。在乡镇集体办幼儿园中,由于经费限制,篮球活动往往面临资源...
"PROTEUS 篮球比赛计时器" 是一款基于PROTEUS软件平台设计的模拟硬件系统,主要用于篮球比赛中的计时和计分功能。标题表明了该系统的应用领域和核心功能,即为篮球比赛提供精准的时间管理和得分显示。 【描述详解】...
首先,文章回顾了我国篮球后备人才培养的主要途径,包括体育系统的体育运动学校、重点业余体校和普通业余体校等“三级训练网”,以及教育系统的体育后备人才试点中学、篮球传统项目学校、中小学校篮球队构成的“校园...
篮球比赛计分表是记录篮球比赛中各队得分、犯规、暂停等关键信息的重要工具,用于公正、准确地追踪比赛进程。这份"篮球比赛计分表word版"文档显然是为XX学院迎新杯篮球赛设计的,它包含了比赛的多个方面,如球队信息...
在篮球计分器的应用中,89C52处理来自按键的输入,控制七段数码管显示分数,并可能包括一些附加功能,如计时、声音提示等。 程序的核心部分是逻辑控制,这通常涉及到中断服务子程序和主循环。中断服务子程序负责...
篮球急停跳投技术是篮球比赛中一种至关重要的得分手段,尤其在中距离区域,它能够帮助球员在面对防守压力时迅速创造出投篮机会。这项技术的精髓在于结合速度、力量和精准度,使得运动员能够在短时间内完成停止、稳定...
在本文中,我们将深入探讨如何使用Adobe Flash 8创建一个逼真的篮球落地效果。Flash 8是一款历史悠久的矢量动画和交互式内容创作工具,它允许设计师和开发者制作丰富的网络内容,包括动态图形、交互式游戏以及动画...