Java の switch 文

「あらゆる分岐を、メソッドのオーバーロードに帰着させる」というのは、
オブジェクト指向設計の「標準形」のひとつだと思う。

switch 文

void proc(var variable) {
  switch ( variable ) {
  case c1:
    ...
    break;
  case c2:
    ...
    break;
  }
}

は、

interface Procedure{
  public void proc();
}
class C1 implements Procedure {
  void proc(){ ... }
}
class C2 implements Procedure {
  void proc(){ }
}

Procedure p = ...;
p.proc();

とか。

しかし、Javaのメソッドのオーバーロードによる分岐はあまり強力ではない。
(強力というのは、その構文だけでほとんど何でもできちゃうということ
ocaml,haskellの引数パターンマッチの方がはるかに便利っぽい。

もっとオブジェクト指向的な話では、
double dispatch、つまり、C1,C2 の型情報によって自動的な切り替えが起こるのと同じように(そして同時に)、
Procedure1とかProcedure2 に関して切り替えが起こってほしい、というのを実現した、
Visitor patternがある。