V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  程序员

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

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

    软件编程中有比较经典的 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   ·   实用小工具   ·   5115 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 05:45 · PVG 13:45 · LAX 21:45 · JFK 00:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.