各位设计开发自己的框架过程中使用了多少个设计模式? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX    程序员

各位设计开发自己的框架过程中使用了多少个设计模式?

  •  
  •   tctc4869 2020-08-10 08:35:52 +08:00 5968 次点击
    这是一个创建于 1939 天前的主题,其中的信息可能已经有所发展或是发生改变。

    软件编程中有比较经典的 26 个设计模式,分为创建,结构,行为。

    那么各位开发自己的框架有哪些,其中用到多个设计模式呢?尤其是结构与行为的设计模式,各位用到了多少个?

    我感觉 26 个设计模式中,有几个设计模式是消灭重复性冗余代码的关键。比如策略模式。除了这个还有哪些设计模式能消灭重复性冗余的代码?

    27 条回复    2020-08-11 10:12:09 +08:00
    zy445566
        1
    zy445566  
       2020-08-10 08:47:07 +08:00 via Android
    我觉得冗余代码还不是最要紧的,无副作用就行。
    azcvcza
        2
    azcvcza  
       2020-08-10 09:19:55 +08:00   6
    任何设计模式都是加了一层中间层来控制。不知道在哪里看过这样意思的一句话。带着这种思想再去看设计模式的书,深感确实是这样
    inwar
        3
    inwar  
       2020-08-10 09:22:36 +08:00 via Android
    毫无意识地用了:D
    码模块还是得先根据需求设计一下代码框架,考虑下边界再往里面填逻辑
    zarte
        4
    zarte  
       2020-08-10 09:45:53 +08:00
    单例模式
    egglin
        5
    egglin  
       2020-08-10 09:48:16 +08:00
    策略模式是为了减少 ifelse 吧
    arry
        6
    arry  
       2020-08-10 09:53:58 +08:00
    监听器,模板
    ericls
        7
    ericls  
       2020-08-10 10:19:54 +08:00   1
    设计模式的使用就是拿着锤子找钉子
    wysnylc
        8
    wysnylc  
       2020-08-10 10:21:41 +08:00
    @azcvcza #2 一个中间层不能解决,就 N 个
    gadsavesme
        9
    gadsavesme  
       2020-08-10 10:22:00 +08:00
    个人常用模板方法,建造者,工厂这几种。实际开发中很多业务实际上也不需要那么多设计模式,强行往上套感觉蠢蠢的。
    azcvcza
        10
    azcvcza  
       2020-08-10 10:31:04 +08:00
    @wysnylc 在知乎上以前看过一个澳洲码农( Damon Dance For Me)(因为在对比流浪地球和星际穿越时候双标被挂了怒而改名)。他写过一个很有意思的回答,论 java 如何变成 Spring,感觉真是集设计模式改造之大成。这回答要翻挺久估计,好像 14 年左右写的
    PiersSoCool
        11
    PiersSoCool  
       2020-08-10 10:35:58 +08:00
    @azcvcza 所以 Java 是有语言缺陷的,有些语言就没有一些设计模式,设计模式是针对缺陷使用的

    所以我想的是,能不用就不要用太多设计模式,没意义
    fhsan
        12
    fhsan  
       2020-08-10 10:38:53 +08:00
    分层吧,数据库-服务层-控制器-视图
    wysnylc
        13
    wysnylc  
       2020-08-10 10:45:01 +08:00
    @azcvcza #10 其实从建筑学来看这个再正常不过
    高楼大厦内部都是统一标准规范模式,这是千百年来行业沉淀的经验
    软件开发就是虚拟世界的建筑学
    WngShhng
        14
    WngShhng  
       2020-08-10 11:03:34 +08:00
    常用的: 模板,单例,委托,工厂,构建者,责任链,代理,策略

    主要用来消灭冗余代码,只写一套逻辑,便于维护
    azcvcza
        15
    azcvcza  
       2020-08-10 11:13:48 +08:00
    @PiersSoCool 好用的基本都变成语法本身了
    tctc4869
        16
    tctc4869  
    OP
       2020-08-10 11:16:48 +08:00
    @egglin 是的,但是策略模式,的确可以消灭冗余代码。缺陷是,动态添加麻烦
    chucongqing
        17
    chucongqing  
       2020-08-10 11:17:36 +08:00
    命令模式,做 undo/redo 好用
    GM
        18
    GM  
       2020-08-10 11:23:29 +08:00
    国内做个业务要各种对接第三方平台,所以 adapter 模式用得最多。
    Brucepac
        19
    Brucepac  
       2020-08-10 12:38:23 +08:00 via iPhone
    @wysnylc 没毛病,像架构 architecture 和 developer 原来意思都是跟建筑有关
    Brucepac
        20
    Brucepac  
       2020-08-10 12:46:38 +08:00 via iPhone
    @azcvcza 然后在不同的场景下给中间层起不同的名字。其实我感觉不仅是代码中,现实生活中的问题解决基本也是这样,你不会的事,你就会去找好用的工具或者擅长的人帮你。
    panhongkui
        21
    panhongkui  
       2020-08-10 12:59:02 +08:00
    设计模式就是软考的时候复习了下,项目中常用的也就十来个,消息队列会用到观察者模式。
    ruyu
        22
    ruyu  
       2020-08-10 13:19:04 +08:00
    设计模式都是浮云
    wysnylc
        23
    wysnylc  
       2020-08-10 14:09:00 +08:00
    @tctc4869 #16 策略模式建议使用 switch+interface 实现,不要写太复杂要不然维护好麻烦
    tctc4869
        24
    tctc4869  
    OP
       2020-08-11 08:31:56 +08:00
    @wysnylc 我倒觉得,策略模式用 map,key 是 String,value 是函数对象这种形式比较好,实现起来也比较简单,要知道有些设计模式,一些语言本身也集成了。
    tctc4869
        25
    tctc4869  
    OP
       2020-08-11 08:37:34 +08:00
    @wysnylc 一些设计模式的组合也能在更广的角度上上消灭冗余代码,比如命令模式与策略模式的设计组合
    zzl22100048
        26
    zzl22100048  
       2020-08-11 08:38:02 +08:00 via iPhone
    @wysnylc 都 switch 了为啥不一步到位用 map
    wysnylc
        27
    wysnylc  
       2020-08-11 10:12:09 +08:00
    @zzl22100048 #26 switch 如果是 String 类型内部实现就是先 hash 对比再 eq 和 Map 一致,使用 Map 的问题是无法直观的看到 Map 的内容
    如果按照你这个逻辑最后一定是使用 Objects
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5689 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:57 PVG 09:57 LAX 17:57 JFK 20:57
    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