使用更优雅的代码重构多个 switch 语句
在我的应用程序中,我必须在许多方法中基于变量值(m_iIndex)执行许多任务。 为了实现它,我在大多数方法中使用 switch case 语句
例如:
MathMethod()
{
switch(m_iIndex)
{
case 0 : CallAddition(); break;
case 1 : CallSubtraction(); break;
case 2 : CallMultiplication(); break;
case 3 : CallDivision(); break;
}
}
StrangeMethod()
{
switch(m_iIndex)
{
case 0 : CallStrange(10,"John"); break;
case 1 : CallStrange(20,"Paul"); break;
case 2 : CallStrange(30,"Kurt"); break;
case 3 : CallStrange(40,"Mark"); break;
}
}
这对于另外 10 个方法来说仍然如此。我想知道是否有一种方法可以通过减少我所有方法中的 switch case 语句来使这段代码更加优雅和简短。
In my application, i have to perform many tasks based on a variable value(m_iIndex) in many of my methods.
For achieving it i use switch case statements in most of my methods
For ex :
MathMethod()
{
switch(m_iIndex)
{
case 0 : CallAddition(); break;
case 1 : CallSubtraction(); break;
case 2 : CallMultiplication(); break;
case 3 : CallDivision(); break;
}
}
StrangeMethod()
{
switch(m_iIndex)
{
case 0 : CallStrange(10,"John"); break;
case 1 : CallStrange(20,"Paul"); break;
case 2 : CallStrange(30,"Kurt"); break;
case 3 : CallStrange(40,"Mark"); break;
}
}
This continues for some 10 more methods. I was wondering is there a way to make this code more elegant and short, by reducing the switch case statements in all my methods.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试使用多态性并为每个操作创建一个类。这称为命令模式。
我只能猜测您如何设置
m_iIndex
,但以下示例演示了我的意思:如果您提供更多上下文,我可以更改我的示例以更好地满足您的要求。
Try using Polymorphism and create a class per operation. This is called the Command pattern.
I can only guess on how you set
m_iIndex
, but the following example demonstrates what I mean:If you provide more context, I can change my example to better meet your requirements.
假设您的方法
MathMethod()
和StrangeMethod()
以及成员m_iIndex
是类YourClass
的一部分>。尝试消除m_iIndex
;相反,使用YourClass
的子类,其中MathMethod
和StrangeMethod
是虚拟的,并在子类中被覆盖。此处
你会找到更详细的答案。
Lets assume your methods
MathMethod()
andStrangeMethod()
as well as the memberm_iIndex
are part of a classYourClass
. Try to eliminatem_iIndex
; instead, use sub classes ofYourClass
whereMathMethod
andStrangeMethod
are virtual and get overriden in your subclasses.Here
you will find a more elaborate answer.