正反饋算法
我最近設計了一個這樣的算法:有一個算法的總體框架,抽象了共同的部分;把各個差異的部分放在具體的類裏面實現。具體的子類要實現好多的特殊情況,有的情況很罕見,有的情況很常見;但是爲了正確,必須涵蓋所有的情況。
具體的代碼類似下面:
template<class ConcreteClass>
bool wholeAlgo(ConcreteClass& cc)
{
init();
while(cc.go()){
cc.doAllCases();
doSomething();
}
return cc.result();
}
class CClass1
{
public:
bool go()
{
//return true;
}
void doAllCases()
{
switch(x)
{
case 0:
doCase0();
break;
case 1:
doCase1();
break;
// more case here
default:
break;
}
}
bool result()
{
//return true;
}
};
如果對這個算法進行測試,可能會有一些特殊的情況沒有考慮到;但是可以修改CClass1的doAllCases()來包含這種情況,但同時保證:對這種特殊情況的增加不會影響其他的情況的代碼;對這種特殊情況的增加不會影響總體的算法框架wholeAlgo的實現。也就是說,各種情況之間是相互獨立的,並且獨立於整個算法框架。
符合這種特點的算法稱之爲正反饋算法。反之,如果對一種特殊情況的處理會影響其他情況的代碼,或者影響算法的整體框架,那麼這個算法就不是正反饋算法。