作为一个程序猿,if - else的使用会贯穿我们的整个职业生涯,但是有句话说的好,成年人不做选择题,那我们应该如何避免选择题呢?
if(condition 1) { 分支流程1 } else if(condition 2) { 分支流程2 } …… else { 分支流程n }
【违反开放、封闭原则】: 新增一种判断时,会新增一个if-else分支
针对与上述原则,建议使用函数表结构:
typedef bool (*ProcessFuncPtr)(const ItemState& current, ItemState& next); struct ActionProcess{ Action act; ProcessNextFuncPtr processFunc; } ActionProcess actMap[] = { {FARMER_GO, ProcessFarmerGo}, {FARMER_GO_TAKE_WOLF, ProcessFarmerGoTakeWolf}, {FARMER_GO_TAKE_SHEEP, ProcessFarmerGoTakeSheep}, {FARMER_GO_VEGETABLE, ProcessFarmerGoVegetable}, {FARMER_BACK, ProcessFarmerBack}, {FARMER_BACK_TAKE_WOLF, ProcessFarmerBackTakeWolf}, {FARMER_BACK_TAKE_SHEEP, Proces