OO に限らず、手続き型プログラミングでも「定石」はあるけど、なぜか名前がついてないな。

たとえば関数電卓なんかで使う、関数名と実装の関数ポインタの対となるテーブルを用意して使う方法。

struct {
  const char *name;
  int num_opl;
  int (*func)(struct node*);
} op[] = {
  { "sin", 1, Sin },
  { "cos", 1, Cos },
  { "ack", 2, Ack },
};

これで「テーブルドリブンパターン」とか。if - else でロジックに埋め込むよりも保守が楽。

他にも末尾に番兵となる要素を入れておく「センチネルパターン」、連結リストを使うときに両端にダミーノードを
ひとつ用意することで端かどうかの条件分岐を無くす「ダミーノードパターン」とか、いくらでも出てきそうな気が
する。

(この例だと、設計よりは実装よりだな……)