• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cwlmxwb
V2EX  ›  程序员

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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