CSSE 板


LINE

※ 引述《ellinas (keep your faith !)》之铭言: : 最近看到一些关於反design pattern的看法 [1] : 其中最着名的当属Paul Graham以及Beyond Java这本书 : Paul认为 当他看到程式之中有重覆性出现时 他认为是警讯 [2] : 因为这表示程式abstraction的程度还不够 : 才有这种类似copy的模式出现 : (当然这与copy&paste code的层次明显不同 -.-") : 我也看过有人认为GoF的design pattern是C++的补钉大全 : 像是Visitor采用的double dispatch [3] : 在某些程式语言直接有支援 也就不需要采用Visitor这个pattern : 但是我忘记这是在那里看到的 有人知道这个说法的出处吗? visitor 我印象中跟 double dispatch 没啥关系, double dispatch 是 multimethod 的一种实现方式, 的确像是 Haskell 和 Dylan 这些语言就有支援, 主要是你希望 obja.method(objb) 这样写的时候, 实际会是哪个 method 被 call 到, 不但要看 obja 的实际型别, 还要看 objb 的实际型别才能决定, 否则你必然得在 obja 实际型别的 method 里, 写一大串 if else 搭 typeid 和 dynamic_cast 判断 objb 的实际型别才能搞定, 这个部分通常被称为 type switch, 在 C++ 的 OO 程式码里算是一大恶例。 : 版上各位对design pattern的看法又是如何呢?在实际使用方面呢? : 我平常写程式时也常会使用一些基本的pattern : 像是singleton, factory, visitor 但对有些pattern还是未能运用自如 : 我觉得pattern是还蛮重要的 可以把思考提升一个层次 : 学习pattern除了看书外 假如能碰到需要使用的场合 : 使用过几次 看到问题就能想到pattern : 这方面光看书应该比较难体会 一些实务经验似乎是必需 : 版主之前有发表过关於pattern的文章 但似乎是持反对立场 : 不知道我们应该对pattern持什麽样的态度呢? singleton 和 factory 简单来说就是防白目用的, 或是防止自己耍白痴, team work 的时候常常有很多白目讲不听又不看文件和注解, 白话来说这两个 patterns 是预防这些状况发生的策略之一, 不过考试这样作答零分就是了, 因为它们存在的意义不只是这些, 我没讲的教科书应该都有讲了。 visitor 的话我建议是尽量少用, 它在 OO design pattern 界里面受争议的程度, 跟 procedural programming 里的 goto 差不多, 不是绝对不可以用, 也不是说用了一定会不好, 而且也的确有它有用的地方。 至於用到它的时机, 简单说就是做一些 dirty work 的时候会用到, 一般来说会伴随着实务上某些奇怪的要求, 才会让你非用它不可, 它的实现手法事实上也蛮肮脏的。 : [1] http://fcamel.twbbs.org/archives/2007/01/14/247/ : [2] http://en.wikipedia.org/wiki/Design_pattern_(computer_science)#Criticism : [3] http://en.wikipedia.org/wiki/Double_dispatch -- Name: Tseng, Ling-hua E-mail Address: [email protected] School: National Tsing Hua University Department: Computer Science Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Software pipelining for VLIW architectures Homepage: https://it.muds.net/~uranus --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.217.38 ※ 编辑: tinlans 来自: 61.230.217.38 (02/08 22:54)
1F:推 YuYuHo:visitor确实很dirty,乱用会让程式变得更复杂. 02/09 15:33







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP