首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多开关案例设计模式

多开关案例设计模式
EN

Stack Overflow用户
提问于 2015-06-30 16:29:04
回答 2查看 329关注 0票数 1

我有多个switch语句

代码语言:javascript
复制
switch(condition1)
{
 case 1:
  doSomething;
  break;

 case 2: 
  doSomething;
  break;

 default
  break;
}

--

代码语言:javascript
复制
 switch(condition2)
 {
  case 1:
   doSomething;
   break;

 case 2: 
  doSomething;
  break;

 default
  break;
 }

条件可以在未来增加,例如。condition3,condition4,即可以有更多的切换语句。所以我需要可伸缩性。

我想合并这些switch语句。我不想使用太多的if,else条件。在两者之间没有return语句来中断流。无动态内存分配。没有多维数组。

例如:

代码语言:javascript
复制
result = someOperation(condition1, condition2, condition3...)

switch(result)
{
  case 1:
   doSomething;
   break;

 case 2: 
  doSomething;
  break;

 default
  break;

}

具体地说,我希望生成多个int的唯一组合。我不想要字符串比较。我更喜欢在某些设计模式中隐藏整个功能(尽管我找不到一个)。

EN

回答 2

Stack Overflow用户

发布于 2015-06-30 17:07:19

条件可以在未来增加,例如。condition3,condition4,即可以有更多的切换语句。所以我需要可伸缩性。

评论:策略模式是可行的,但是我该如何选择策略呢?

请考虑以下内容:

代码语言:javascript
复制
class operation // strategy base
{
public:
    virtual bool applies(int result) const = 0;
    virtual void perform() = 0;
    virtual ~operation() = 0;
};

class first_case: public operation // choose better name than first_case
{
public:
    bool applies(int result) const override
    {
        return result == 1; // equivalent of "case 1:"
    }
};

// other cases defined here

客户端代码:

代码语言:javascript
复制
void do_stuff()
{
    // std::vector<std::unique_ptr<operation>> operations; defined else-where

    auto result = someOperation(condition1, condition2, condition3...);

    for(auto &op: operations) // equivalent of your switch above
        if(op.applies(result))
        {
            op.perform();
            break;
        }
}

基本上,您将策略选择标准实现为操作基础上的虚拟API (并针对每个操作进行专门化)。

票数 1
EN

Stack Overflow用户

发布于 2015-07-01 16:37:43

如果你需要一些可伸缩的东西,也许你可以实现某种类型的表,按条件结果索引,它存储了一个代表条件结果而被调用的函数的指针。这样,您将获得一些可伸缩的(您可以在运行时动态修改表)和高效的(嗯,不如switch语句高效,但可能足以满足您的目的)

如果您必须为条件添加新的代码(或者最后一段的解决方案效率不够高),最有效的方法是编写一个小程序来为您生成switch语句(也许在适当的位置#include它),并将此生成包含在自动构建过程中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31133260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档