V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
beryl
V2EX  ›  程序员

设计模式实际场景探讨

  •  
  •   beryl · 2020-12-09 21:12:08 +08:00 · 1860 次点击
    这是一个创建于 1477 天前的主题,其中的信息可能已经有所发展或是发生改变。

    语言:Java 业务场景为: 有 N 个 K:K1->K15 每个 K 均有相同的 4 个属性 A 、B 、C 、D 但是每个 K 的属性计算规则不一样: 例如:

    if K = K1:
    	if K1.A = -1
        	K1.B = false
        else 0 < K1.A < 15
        	K1.C = x
            K1.B = true
            K1.D = x
        return K1
            
    if K = K2:
    	if K2.A < 0.5
        	K2.B = false
    
    

    如果要硬写的话,要写一堆 if-else, 想到使用规则引擎 easyrule,但是之前没用过,好像也不太适合,因为还需要返回值

    也看了一些其他的策略模式这种,但是都不是那么好抽象

    7 条回复    2020-12-10 17:57:17 +08:00
    louiswang002
        1
    louiswang002  
       2020-12-09 21:32:43 +08:00 via iPhone
    可能策略模式是最适合的设计模式,定义一个抽象类包括 A B C D 四个属性,再定义 K1-K15 的实现类继承抽象类,具体 A B C D 得属性值在实现类里面处理
    across
        2
    across  
       2020-12-09 21:36:59 +08:00 via iPhone
    设计模式,不是用在这里的
    freebird1994
        3
    freebird1994  
       2020-12-09 21:59:56 +08:00 via Android
    大量的 if else 场景大多数时候都可以用模板方法+策略模式解决
    xuanbg
        4
    xuanbg  
       2020-12-10 00:10:59 +08:00
    查表
    beryl
        5
    beryl  
    OP
       2020-12-10 09:51:59 +08:00
    @louiswang002 这样会不会类太多了最后
    louiswang002
        6
    louiswang002  
       2020-12-10 10:50:50 +08:00 via iPhone
    @beryl 会有些多,不过牵涉到处理逻辑,我暂时没想到很好的处理方法;你可以看一下语言层面有没有一些特性辅助处理,如果有更好的方式也可以分享一下
    zypy333
        7
    zypy333  
       2020-12-10 17:57:17 +08:00
    感觉逻辑这么简单没必要用类
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2960 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:11 · PVG 22:11 · LAX 06:11 · JFK 09:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.