各位在工作中设计模式到底用得多吗?

2019-08-15 11:48:22 +08:00
 ZhengZW

除了工厂和单例和代理,有没有用到其他的,工作到现在用最多就工厂和单例,想问问你们用过哪些,应用啥场景?

7234 次点击
所在节点    程序员
34 条回复
Shiyq
2019-08-15 19:56:58 +08:00
都是大佬,我最多继承几个基类搞搞,也不知道那是不是设计模式
JerryCha
2019-08-15 20:11:59 +08:00
没具体看过设计模式,看 Google 官方的 Android 案例看得挺懵的
oneisall8955
2019-08-15 20:53:09 +08:00
@stevenkang 类似策略模式
justin2018
2019-08-15 20:59:12 +08:00
先完成需求 然后等有时间了在重构~~

一般有时间的情况非常少~~ 😔
justfortest
2019-08-15 21:56:05 +08:00
一般单例、工厂、适配器之类的都会用到
BigDogWang
2019-08-15 22:34:54 +08:00
@yukong 我思量着策略模式新增策略不是也要修改工厂类吗
pastgift
2019-08-15 22:35:49 +08:00
设计模式是编码经验的总结,所以实际上是现有代码,后有设计模式。

代码写多了,写出来的代码自然就带这某种设计模式。
而不是说为了用某个设计模式然后照着写代码,模式就是套路( pattern ),是一种指导,不要搞成 template 了
BigDogWang
2019-08-15 22:38:06 +08:00
@yukong 新增策略不需要改动工厂类吗
ChefIsAwesome
2019-08-15 23:41:22 +08:00
最常见的,套一层模式。例如写 API,调 API 的时候,通常在真正的实现前面加一层,这里头有可能有 proxy,有可能有装饰器,有可能有适配器。
所有的封装,都是 facade。
现在做界面,都是 mvc。
队列,错误回滚,是 command。
俩模块通过共享的父模块通信,是中间人模式。
各种配置初始化的过程,都包括 template method。
有些做游戏的,为了帧数稳定,会搞个内存池,自己控制内存释放。
做响应式开发的 rx,有迭代器,有 observer,有 command,有惰性求值。rx 是个函数式编程的产物。
做前端写 react 的应该熟悉:HOC 是装饰器。各种 life cycle 的配置是模板方法。对比以前的 mixin 和现在的 hook,是明显的 Composition over inheritance 的设计思维。

设计模式是问题+解决策略+实现方法。有的问题是面向对象独有的,有的是不分编程语言的。那些个模式到处都在用,死记硬背没意义。
129ykx733D016U2n
2019-08-16 00:21:01 +08:00
其实并没有严格按照书本上的设计模式什么的,那只是一种思路,只要逻辑清晰,顺手,不影响性能,怎么写都可以,没有必要严格按照书本上的代码模式写
q397064399
2019-08-16 06:03:12 +08:00
1. 不必严格按照模式去做,去生搬硬套
2. 关键掌握设计模式的或者说是各种模式的真正精髓 SOLID 原则
其实在我看来就 Bob Martin 在敏捷软件开发中讲的那样
面向对象或者套用各种模式 最终的目的是 -- 隔离变化,我们创建抽象的本质是将不易变的跟容易变的部分隔离开来

举个简单的栗子:
我们有一个冒泡排序算法 通常的写法是
for ..
for ..

但是你想过一个问题没有,冒泡排序的算法框架大致上是不变的,变化的是什么,被排序的数据结构,
你可能要为一群人这个集合排序 有可能要为一堆数字排序,它们这些抽象的数据表示 可能存在不同的数据结构里面
有可能是 Map 有可能是 Set 有可能是 List
那么隔离它们的这些变化的方式就是提供一个抽象的约定,将高层次的逻辑与低层次的数据隔离开来

swap(a,b)

compare(a,b)

get(a,b)

当这个约定被解构出来的时候,我们双重 for 循环的冒泡算法就再也不用修改了,这样会大大减少程序员的心智负担,对于新增的排序需求,我们只要让它符合中抽象就可以了
Solace202
2019-08-16 08:02:56 +08:00
马士兵老师说过,如果学习设计模式的难度是 50,那么用到项目中的难度就是 300,这个我是一只赞同的
LeeSeoung
2019-08-16 14:01:00 +08:00
其实写的很多代码都是设计模式的变种或者组合
hhhsuan
2019-08-18 10:12:25 +08:00
@stevenkang #11 算是一点策略模式再加一点数据驱动吧。还可以写的更好一点,比如做成动态注册的形式,这样添加新的 type 就不需要修改那个 static 代码块。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/592064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX