大量IF ELSE该用什么设计模式?

Mirricle 2006-04-11 10:19:19
if(aaa == "AA" && bbb == "BB")
{
//
}
else if(aaa == "AAA" && bbb == "BBB")
{
//
}
else if(aaa == "AAAA" && bbb == "BBBB")
{
//
}
else if(aaa == "AAAAA" && bbb == "BBBBB")
{
//
}
....
这样的分支会有好多好多,上百个假如
然后每个分支里的逻辑会不一样,有的简单,有的复杂

用什么样的设计模式好呢
...全文
2558 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
superhasty 2006-04-13
  • 打赏
  • 举报
回复
设计模式的目标主要是为了重用。

出现这种很多if/else的情况,可能和类/架构的设计不合理有关,但也可能是正确的。
所以,设计模式未必一定能解决这个问题。
sunchaohuang 2006-04-12
  • 打赏
  • 举报
回复
逻辑问题
去找个数学高手来帮你看看
cwlcwr 2006-04-12
  • 打赏
  • 举报
回复
Switch

case

default

cj723 2006-04-12
  • 打赏
  • 举报
回复
void Process(string aaa, string bbb)
if(aaa == "AA" && bbb == "BB")
{
//二十行代码
}
else if(aaa.IndexOf("CC") !! bbb.StartsWith("DD"))
{
//三十行代码
}
else if((aaa == "EE" || aaa == "FF" || aaa == "GG") && BB == "HH")
{
//一行代码
}
else if(aaa == "II")
{
//...
}
else if(bbb == "JJ")
{
//...
}
else
{
//...
}

我觉得你的问题,其实是重构的问题
首先应该把那些“二十行”,“三十行”的代码分别写成函数,这样就可以把这个判断进行减肥。看得也比较清楚了。

然后再考虑这个判断有什么内在逻辑,重新进行组织,或者用多态,或者用switch。
反正一个函数过长,就说明它承载的功能太多,把它分解成多个单一功能的函数是比较好的办法。
zhouheng123456 2006-04-12
  • 打赏
  • 举报
回复
你的这个问题..我觉得和什么设计模式没关系
marco08 2006-04-12
  • 打赏
  • 举报
回复
学习...
lengyuewuhen 2006-04-12
  • 打赏
  • 举报
回复
把那些Case值做成一个数组
xiao_p 2006-04-12
  • 打赏
  • 举报
回复
设计模式是为了更好的重构???

醉龍 2006-04-12
  • 打赏
  • 举报
回复
不知道你的条件是否有规律?
MonkWang 2006-04-12
  • 打赏
  • 举报
回复
学习 收藏
zcchm 2006-04-12
  • 打赏
  • 举报
回复
State or Strategy
iuhxq 2006-04-12
  • 打赏
  • 举报
回复
也许判断本身可以简化
Ivony 2006-04-12
  • 打赏
  • 举报
回复
我总觉得你的判断有问题,到底是什么原因导致这么长的判断呢?不能分段判断么?
kingofworl 2006-04-12
  • 打赏
  • 举报
回复
我觉得工场模式可以
Mirricle 2006-04-12
  • 打赏
  • 举报
回复
那二十行代码肯定是要做成函数的
我那么写是为了体现不同条件的处理方式会很不同
现在不是函数长度问题
是条件判断太长了
HashMapArrayList 2006-04-11
  • 打赏
  • 举报
回复
怎么看怎么像作游戏
Ivony 2006-04-11
  • 打赏
  • 举报
回复
参考命令模式……
Mirricle 2006-04-11
  • 打赏
  • 举报
回复
如果能用SWITCH其实就好办了 就可以用Activator.CreateInstance
关键就是条件不止是一个字符串的等于,可能条件中就会有好多,IF的条件中也许都还会调用其他方法
Mirricle 2006-04-11
  • 打赏
  • 举报
回复
场景就是这样啊
void Process(string aaa, string bbb)
if(aaa == "AA" && bbb == "BB")
{
//二十行代码
}
else if(aaa.IndexOf("CC") !! bbb.StartsWith("DD"))
{
//三十行代码
}
else if((aaa == "EE" || aaa == "FF" || aaa == "GG") && BB == "HH")
{
//一行代码
}
else if(aaa == "II")
{
//...
}
else if(bbb == "JJ")
{
//...
}
else
{
//...
}
机器人 2006-04-11
  • 打赏
  • 举报
回复
你是不是误解“工厂模式”了?

“工厂模式”是划分在“构造型模式”里的,

也就是说,用于解决在对象创建时的问题。

根据不同条件,创建不同实例,这是工厂模式所要解决的问题的基本特征

但是,如果楼主在条件判断里所做之事并不是创建实例,那么使用“工厂模式”有点。。。

加载更多回复(14)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧