以下功能在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?
答案 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);
}
}
}