如何修改功能以满足OCP?

时间:2014-09-11 01:44:34

标签: c open-closed-principle

以下功能在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?

1 个答案:

答案 0 :(得分: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);
      }
   }
}