大家对程序设计的 23 种设计模式怎么看 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cwlmxwb
V2EX    程序员

大家对程序设计的 23 种设计模式怎么看

  •  
  •   cwlmxwb 2016-06-06 22:25:54 +08:00 7238 次点击
    这是一个创建于 3463 前的主题,其中的信息可能已经有所发展或是发生改变。
    59 条回复    2016-06-07 21:24:43 +08:00
    loading
        1
    loading  
       2016-06-06 22:29:13 +08:00 via Android
    我从来没看过…
    hinkal
        2
    hinkal  
       2016-06-06 22:34:14 +08:00   1
    怎么看指的是?软件编码是一门经验学科,没有什么太多客观规律。设计模式就是经验总结。
    xiusedelang
        3
    xiusedelang  
       2016-06-06 23:17:31 +08:00 via Android   1
    隔几个月翻出来看一遍,渐渐融入自己的日常中。
    techme
        4
    techme  
       2016-06-06 23:19:21 +08:00
    我就记得了一条,不能为了模式而用模式
    zealic
        5
    zealic  
       2016-06-06 23:21:36 +08:00   1
    世上本没有模式,用的人多了,也就成了模式
    jonechenug
        6
    jonechenug  
       2016-06-06 23:24:57 +08:00 via Android
    少了一点套路,多一点实际
    cwlmxwb
        7
    cwlmxwb  
    OP
       2016-06-06 23:27:18 +08:00 via iPhone
    @techme 这样的思想应该还是要走的吧。
    cwlmxwb
        8
    cwlmxwb  
    OP
       2016-06-06 23:28:05 +08:00 via iPhone
    @xiusedelang 每次阅读都有不一样的感觉吧
    zonghua
        9
    zonghua  
       2016-06-06 23:29:48 +08:00
    只会定义调用函数
    just4test
        10
    just4test  
       2016-06-06 23:30:43 +08:00
    第一次看发现只是把自己用过的几种方式起了个名字。
    ooonme
        11
    ooonme  
       2016-06-06 23:39:40 +08:00 via iPad
    函数式只能呵呵了
    xavierchow
        12
    xavierchow  
       2016-06-06 23:42:12 +08:00   3
    这些模式当然需要了解,但更重要的是理解背后的 OO 思想以及发现 bad smell 的能力。我个人更注重 SOLID principle( https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design), 以前经常在发现 bad smell 后找思路的时候扫一眼 Gof 的 Design pattern, 但是不要照搬,更不要为了模式而模式。
    qwerasdf
        13
    qwerasdf  
       2016-06-06 23:47:38 +08:00
    不想从零写一个大软件就不用看
    xiusedelang
        14
    xiusedelang  
       2016-06-07 01:23:29 +08:00
    @cwlmxwb 是的,每次都有开朗贯通的感觉

    个人经验,设计模式一定要避免用力过猛。
    一般公司工作中因为都是基于各种框架开发,自己能用上模式的地方比较少,好学的新人可能会强行使用各种刚学会的模式。
    cwlmxwb
        15
    cwlmxwb  
    OP
       2016-06-07 04:56:38 +08:00 via iPhone
    @qwerasdf 既然选择了 c++,应该会遇到做大软件的时候
    ming2050
        16
    ming2050  
       2016-06-07 05:02:16 +08:00 via Android
    太多了,先学精三种吧
    haozhang
        17
    haozhang  
       2016-06-07 07:29:34 +08:00 via iPhone
    23 种类使用方式...
    ChefIsAwesome
        18
    ChefIsAwesome  
       2016-06-07 08:32:42 +08:00   1
    明明是面向对象语言的设计模式
    这几条原则倒是各个语言通用的:
    Encapsulate what varies.
    Favor composition over inheritance.
    Classes should be open for extension, but closed for modification.
    jeffersonpig
        19
    jeffersonpig  
       2016-06-07 08:34:57 +08:00
    不了解,没在意过 T.T
    stackboom
        20
    stackboom  
       2016-06-07 08:37:14 +08:00
    理解 SOLID ,大部分设计模式你都可以写出来。
    litpen
        21
    litpen  
       2016-06-07 08:39:17 +08:00 via Android
    在做项目的过程中没想过设计模式,做完后发现处处都有设计模式
    sivacohan
        22
    sivacohan  
    PRO
       2016-06-07 08:54:22 +08:00 via Android
    设计模式可别瞎看。尤其是初学者。

    那玩意是对自己写了几年,十几年代码里面的一个总结
    。初学者看那玩意总会用力过猛。一切皆模式,一切皆对象,一切皆 xxx 。

    相信我没有银弹,先看别人的项目,发现你在没看书之前就已经使用了 5 种以上设计模式的时候,你再好好看这书。
    alexRH
        23
    alexRH  
       2016-06-07 09:11:52 +08:00
    这东西就像数学课本的课后习题,做了,你一样不会考试。
    wudanyang
        24
    wudanyang  
       2016-06-07 09:14:38 +08:00
    买了本书看
    shakoon
        25
    shakoon  
       2016-06-07 09:26:28 +08:00
    几个人的小项目粗放管理时可能感觉不到,当我自己开始管理百万元级的项目时,发现这些都是前辈血淋淋的经验啊,太赞了,以前走了好多弯路。所以我带应届生,都会时不时提醒他们注意一些他们觉得不以为然的地方。方法论真的很重要,不懂设计模式只会长期停留在初级码农级别。
    levn
        26
    levn  
       2016-06-07 09:39:58 +08:00
    设计模式概念是从建筑领域引入。所以么。
    bigpigeon
        27
    bigpigeon  
       2016-06-07 09:44:19 +08:00
    就好像知道自己在做什么这种感觉吧,就好像为什么人要有名字一样
    cwlmxwb
        28
    cwlmxwb  
    OP
       2016-06-07 09:47:35 +08:00 via iPhone
    @levn 所以 先去搬砖
    robertlyc
        29
    robertlyc  
       2016-06-07 09:49:08 +08:00
    荼毒
        30
    cwlmxwb  
    OP
       2016-06-07 09:49:12 +08:00 via iPhone
    @ChefIsAwesome 就举了个 c++的例子嘛,我知道用在 Java python 都可以 只不过是个思想而已
    cwlmxwb
    jackisnotspirate
        31
    jackisnotspirate  
       2016-06-07 09:51:17 +08:00
    设计模式大约 Java C++ 用的多吧。
    chrishine
        32
    chrishine  
       2016-06-07 10:01:07 +08:00 via Android
    23 种设计模式不过是剑招,学习剑招可以看 headfirst 系列,容易入门。
    gof 设计模式中的第一章第二章是总剑诀(第三章是剑招,如果没记错的话),所有人关于设计模式的批判与赞扬,鄙视与崇拜,都逃不出总剑诀所述。
    imcxy
        33
    imcxy  
       2016-06-07 10:01:44 +08:00
    你是怎么看的
    cwlmxwb
        34
    cwlmxwb  
    OP
       2016-06-07 10:27:32 +08:00 via iPhone
    @imcxy 适当的时候使用设计模式可以让写出来的代码容易维护,举个例子,工厂模式,如果在某些特定的时候需要使用而没有使用,那么很可能会违反软件设计的开闭原则,代码清晰度也可能很糟糕(随处可见的 new )
    murmur
        35
    murmur  
       2016-06-07 10:29:07 +08:00
    学 java 的把 spring 那套东西全用一遍再看设计模式就懂了
    cwlmxwb
        36
    cwlmxwb  
    OP
       2016-06-07 10:29:32 +08:00 via iPhone
    @robertlyc 言重了吧,前人的总结,运用的好的话可以事半功倍吧
    wujunze
        37
    wujunze  
       2016-06-07 10:31:08 +08:00
    少一点套路 多一点技术
    wujunze
        38
    wujunze  
       2016-06-07 10:34:02 +08:00
    @chrishine
    @shakoon
    @sivacohan 层主们 在哪里看的 23 种设计模式 麻烦丢个 URL 过来
    stcasshern
        39
    stcasshern  
       2016-06-07 10:41:32 +08:00
    感觉有必要,当前读别人代码觉得怎么这么多事儿啊,后来接触设计模式,觉得果然精妙,当然小工程其实也没那必要
    stcasshern
        40
    stcasshern  
       2016-06-07 10:42:08 +08:00
    @wujunze 推荐《大话设计模式》,简单易懂
    wujunze
        41
    wujunze  
       2016-06-07 10:46:38 +08:00
    @stcasshern 3Q 这本书讲了 23 种设计模式麽?
    icybee
        42
    icybee  
       2016-06-07 10:48:03 +08:00
    设计模式真的和语言无关么?
    cwlmxwb
        43
    cwlmxwb  
    OP
       2016-06-07 10:49:26 +08:00 via iPhone
    @icybee 主要针对 oop
    cwlmxwb
        44
    cwlmxwb  
    OP
       2016-06-07 10:50:01 +08:00 via iPhone
    @wujunze 搜索 c++设计模式 就有了
    slert
        45
    slert  
       2016-06-07 10:53:55 +08:00
    实际用到的机会虽然不多,但是对设计原则的掌握对写代码肯定是有帮助的。
    bramblex
        46
    bramblex  
       2016-06-07 11:27:17 +08:00
    @icybee

    当然跟语言有关,只有 oop 语言才适用 oop 的设计模式。

    换一门 functional 的语言, oop 的设计模式就都日狗了。

    不过由于主流语言绝大部分是 oop 的,所以其实总体来说,设计模式的适用范围还是挺广的。
    bramblex
        47
    bramblex  
       2016-06-07 11:30:12 +08:00
    @slert

    因为码农主要干的活都是拿别人现成的框架填业务逻辑。

    但是如果自己设计框架就不一样了,放眼望去,全都是设计模式。
    imcxy
        48
    imcxy  
       2016-06-07 11:38:57 +08:00
    说黑虎掏心你可能一下子懵逼,但是其实你会了几十年了。

    设计模式本身其实不是什么知识点。最大的作用其实只是一个知识总结。就是知道了:草黑虎掏心就是这玩意啊。

    一切源自于生活,生活有许多原则。卖个肥皂,直接上门一家家卖会喝西北风,找个超市老板一下子就卖出去了。这就是生活。
    kenshin
        49
    kenshin  
       2016-06-07 11:59:51 +08:00
    设计模式 = 理论(所以跟语言无关),需要具体实现(所以与语言有关)。
    MVC /MVP /MVVM 这些都是设计模式。所以,一般情况下,无论你是否使用,它都在那儿。
    拿 前端开发 举个例子:即便什么都不用,只用了 jQuery ,那么你相当于用了很多 设计模式,如:组合模式;适配器模式;外观模式;观察者模式;代理模式 等等。

    设计模式是为了解决实际问题的,不要为了设计模式而设计模式。 :)

    PS :建议初学者不要接触,等以后有了语言有了自己的认识 or 项目经验后再看,会豁然开朗。尤其当你接手了一个旧项目后,利用好某些设计模式让你少走很多弯路。
    acros
        50
    acros  
       2016-06-07 12:02:52 +08:00
    不知道 DP ,代码瞎写混乱 -> 了解 DP ,到处使用(尤其是单例) -> 稍微知道点优缺点,谨慎使用 -> 项目更大了,多种 DP 混合使用,脑袋更不上,代码又乱了 -> 再翻四人帮书 -> 发现自己似乎更不懂 DP 了
    Mutoo
        51
    Mutoo  
       2016-06-07 12:11:57 +08:00
    「哇,原来我一直在写的东西别人都取好名字了呀」
    qqmishi
        52
    qqmishi  
       2016-06-07 12:36:58 +08:0 via Android
    我记得在哪里看过一句,在不断的重构之中抽象总结出来的就叫模式
    21grams
        53
    21grams  
       2016-06-07 12:48:54 +08:00 via Android
    为什么是 23 种
    cwlmxwb
        54
    cwlmxwb  
    OP
       2016-06-07 13:00:20 +08:00 via iPhone
    @21grams 抽象出来的吧,前人归纳的这么一些
    changwei
        55
    changwei  
       2016-06-07 13:02:51 +08:00
    框架内部已经实现了模式,我只是用框架的人而已,所以也可以认为我间接的使用了 N 种设计模式。
    cwlmxwb
        56
    cwlmxwb  
    OP
       2016-06-07 13:04:44 +08:00 via iPhone
    @changwei 要是公司要自己写框架,那么设计模式必须了解吧
    2owe
        57
    2owe  
       2016-06-07 13:36:14 +08:00
    设计模式是前人提炼出来的一套开发思想,可以带给自己思考,这是坠吼滴!

    除了 HeadFirst 系列,同事推荐郑晖的这本《冒号课堂》, https://www.amazon.cn/gp/product/B00A76JAD0/
    unoyx
        58
    unoyx  
       2016-06-07 17:55:12 +08:00
    SOLID 是最重要的,《设计模式》、《 Game Programming Patterns 》这些都是为了在项目中使用 C++、 Jave 这类语言时,为了打到提高内聚、降低耦合等目标而实行的一些具体技巧。
    zhgg0
        59
    zhgg0  
       2016-06-07 21:24:43 +08:00
    看后发现很多方法其实都用过了,遂不看
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2431 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 15:32 PVG 23:32 LAX 07:32 JFK 10:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86