0

以下函数在 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?

4

1 回答 1

2

你没有付出太多,你有一堆条件,还有一堆基于这些条件的“做”。

所以考虑到......你可以制作一些存储条件和回调集合的东西......

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);
      }
   }
}
于 2014-09-11T02:06:07.767 回答