Closed. This question needs details or clarity. It is not currently accepting answers. Learn more
想改进这个问题吗?添加细节并通过editing this post澄清问题。
5年前关闭。
C语言实现了以下功能:
function(struct_XX *p)
{
    if(p->A)
    {
        if(p->B)
        {
            do something0;
        }
        if(p->C)
        {
            do something1;
        }
        if(p->D && p->E)
        {
            do something2;
        }
          if(p->Z)
        {
            do something3;
        }
    }
}

每个分支都有不同的工作要做,它不满足开闭原则(因为p所指向的结构不稳定,经常会在其中添加新的字段,这意味着经常会在函数中添加新的过程代码);如何修改它以满足OCP?

最佳答案

你没有付出太多,你有一堆条件,一堆“做”基于这些条件。
既然如此你可以做一些存储条件集合和回调的东西。。。。

void ocpfunction(struct struct_XX *p)
{
   int i;
   for(i=0; i<p->conditions_count; i++)
   {
      if(p->conditions[i].evaluate(p))
      {
          p->conditions[i].callback(p, p->conditions[i].context);
      }
   }
}

关于c - 如何修改功能以满足OCP? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25777731/

10-13 06:48