使用更优雅的代码重构多个 switch 语句

发布于 2024-11-12 11:15:50 字数 645 浏览 2 评论 0原文

在我的应用程序中,我必须在许多方法中基于变量值(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月亮坠入山谷 2024-11-19 11:15:51

尝试使用多态性并为每个操作创建一个类。这称为命令模式

我只能猜测您如何设置 m_iIndex,但以下示例演示了我的意思:

abstract class Operation
{
    abstract void Execute();
}

class Addition : Operation
{
    public override void Execute()
    {
      // ...
    }
}

// same for Subtraction etc.

void OnAdditionButtonClicked(...)
{
    // Instead of setting m_iIndex to 0, use this instead:
    _operation = new Addition();
}

如果您提供更多上下文,我可以更改我的示例以更好地满足您的要求。

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:

abstract class Operation
{
    abstract void Execute();
}

class Addition : Operation
{
    public override void Execute()
    {
      // ...
    }
}

// same for Subtraction etc.

void OnAdditionButtonClicked(...)
{
    // Instead of setting m_iIndex to 0, use this instead:
    _operation = new Addition();
}

If you provide more context, I can change my example to better meet your requirements.

故人爱我别走 2024-11-19 11:15:50

假设您的方法 MathMethod()StrangeMethod() 以及成员 m_iIndex 是类 YourClass 的一部分>。尝试消除m_iIndex;相反,使用 YourClass 的子类,其中 MathMethodStrangeMethod 是虚拟的,并在子类中被覆盖。

此处
你会找到更详细的答案。

Lets assume your methods MathMethod() and StrangeMethod() as well as the member m_iIndex are part of a class YourClass. Try to eliminate m_iIndex; instead, use sub classes of YourClass where MathMethod and StrangeMethod are virtual and get overriden in your subclasses.

Here
you will find a more elaborate answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文