第十章 简化函数调用

简化函数调用

10.1 Rename Method (函数改名)

函数的名称未能揭示函数的用途

修改函数名称

将复杂的处理过程分解成小函数, 小函数要用好, 必须要有一个好命名, 不是会适得其反.

你不会一次就把名字起好, 大胆的更改吧.

10.2 Add Parameter (添加参数)

某个函数需要从调用端得到更多信息

为此函数添加一个对象参数, 让该对象带进函数所需信息

添加新参数的时候你应该考虑引入对象参数

10.3 Remove Parameter (移除参数)

函数本体不再需要某个参数

将该参数去除

程序员常常喜欢添加参数, 却往往不愿意去除它们.

10.4 Separate Query from Modified (将查询函数和修改函数分离)

某个函数即返回对象状态值, 有修改对象状态

建立两个不同的函数, 其中一个负责查询, 另一个负责修改.

  • 记住函数的功能要单一, 如果你在多线程操作的话, 你会遇到麻烦.

10.5 Parameterize Method (另函数携带参数)

若干函数做了类似的工作, 但在函数本体中却包含了不同的值

建立单一函数, 以参数表达那些不同的值

10.6 Replace Parameter with Explicit Method (以明确函数取代参数)

你有一个函数, 其中完全取决于参数值而采取不同行为

针对该参数的每一个可能值, 建立一个独立函数

10.7 Preserve Whole Object (保存对象完整)

你从某个对象中取出若干值, 将它们作为某一次函数调用时的参数

改为传递整个对象

  • 可以使得参数列更固定. 往往还能提高代码的可读性.
  • 但如果你传递的是整个对象, 被调用函数所在的对象就需要依赖参数对象. 如果这会使得你的依赖结构恶化, 那么就不要使用此项重构.

10.8 Replace Parameter with Method (以函数取代参数)

对象调用某个函数, 并将所得结果作为参数, 传递给另一个函数, 而接受该参数的函数本身也能够调用前一个函数.

让参数接受者去除该项参数, 并直接调用前一个函数.

10.9 Introduce Parameter Object (引入参数对象)

某些参数总是很自然地同时出现

以一个对象取代这些参数

当你把参数组织到一起之后, 往往很快可以发现一些可被移至新建类的行为.

10.10 Remove Setting Method (移除设值函数)

类中的某个字段应该在对象创建时被设值, 然后就不再改变

取代该字段的所有设值函数

10.11 Hide Method (隐藏函数)

有一个函数, 从来没有被其他任何类用到

将这个函数修改为private

10.12 Replace Constructor with Factory Method (用工程函数取代构造函数)

你希望在创建对象时不仅仅是做简单的构建动作

将构造函数替换为工厂函数

  • 在派生子类的过程中以工厂函数取代类型码.

10.13 Encapsulate Downcast (封装向下转型)

某个函数返回的对象, 需要由函数调用者执行向下转型

将向下转型动作移到函数中

10.14 Replace Error Code with Exception (以异常取代错误码)

某个函数返回一个特定的代码, 用以表示某种错误情况

改用异常

10.15 Replace Exception with Test (以测试取代异常)

面对一个调用者可以预先检查的条件, 你抛出一个异常.

修改调用者, 使它在调用函数之前先做检查

不要滥用异常.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容

  • 1 Rename Method(函数改名) 修改函数名字以良好表达函数的用途。Motivation:各种大师特别推...
    hklbird阅读 515评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,781评论 0 38
  • 本文参加#致我们单纯的小美好#活动,本人承诺,文章内容为原创,且未在其他平台发表过。 青葱岁月,记忆染了流...
    记录点滴幸福阅读 517评论 6 3
  • 大家误会我是老板的关系户,我要不要澄清?人在江湖飘,谁还没挨过几刀?遇到被误会的事,我们到底应该去解释清楚,还是相...
    请叫我徐老师x阅读 4,709评论 17 13