V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cwlmxwb
V2EX  ›  程序员

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

  •  
  •   cwlmxwb · Jun 6, 2016 · 7499 views
    This topic created in 3622 days ago, the information mentioned may be changed or developed.
    59 replies    2016-06-07 21:24:43 +08:00
    loading
        1
    loading  
       Jun 6, 2016 via Android
    我从来没看过…
    hinkal
        2
    hinkal  
       Jun 6, 2016   ❤️ 1
    怎么看指的是?软件编码是一门经验学科,没有什么太多客观规律。设计模式就是经验总结。
    xiusedelang
        3
    xiusedelang  
       Jun 6, 2016 via Android   ❤️ 1
    隔几个月翻出来看一遍,渐渐融入自己的日常中。
    techme
        4
    techme  
       Jun 6, 2016
    我就记得了一条,不能为了模式而用模式
    zealic
        5
    zealic  
       Jun 6, 2016   ❤️ 1
    世上本没有模式,用的人多了,也就成了模式
    jonechenug
        6
    jonechenug  
       Jun 6, 2016 via Android
    少了一点套路,多一点实际
    cwlmxwb
        7
    cwlmxwb  
    OP
       Jun 6, 2016 via iPhone
    @techme 这样的思想应该还是要走的吧。
    cwlmxwb
        8
    cwlmxwb  
    OP
       Jun 6, 2016 via iPhone
    @xiusedelang 每次阅读都有不一样的感觉吧
    zonghua
        9
    zonghua  
       Jun 6, 2016
    只会定义调用函数
    just4test
        10
    just4test  
       Jun 6, 2016
    第一次看发现只是把自己用过的几种方式起了个名字。
    ooonme
        11
    ooonme  
       Jun 6, 2016 via iPad
    函数式只能呵呵了
    xavierchow
        12
    xavierchow  
       Jun 6, 2016   ❤️ 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  
       Jun 6, 2016
    不想从零写一个大软件就不用看
    xiusedelang
        14
    xiusedelang  
       Jun 7, 2016
    @cwlmxwb 是的,每次都有开朗贯通的感觉

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

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

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

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

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

    不过由于主流语言绝大部分是 oop 的,所以其实总体来说,设计模式的适用范围还是挺广的。
    bramblex
        47
    bramblex  
       Jun 7, 2016
    @slert

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

    但是如果自己设计框架就不一样了,放眼望去,全都是设计模式。
    imcxy
        48
    imcxy  
       Jun 7, 2016
    说黑虎掏心你可能一下子懵逼,但是其实你会了几十年了。

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

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

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

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

    除了 HeadFirst 系列,同事推荐郑晖的这本《冒号课堂》, https://www.amazon.cn/gp/product/B00A76JAD0/
    unoyx
        58
    unoyx  
       Jun 7, 2016
    SOLID 是最重要的,《设计模式》、《 Game Programming Patterns 》这些都是为了在项目中使用 C++、 Jave 这类语言时,为了打到提高内聚、降低耦合等目标而实行的一些具体技巧。
    zhgg0
        59
    zhgg0  
       Jun 7, 2016
    看后发现很多方法其实都用过了,遂不看
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1147 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 138ms · UTC 17:55 · PVG 01:55 · LAX 10:55 · JFK 13:55
    ♥ Do have faith in what you're doing.