A, B, C, D 및 E 유형이 있고 m1, m2, m3 메소드가 이전 유형의 단일 인수를 취한다고 가정 해 보겠습니다. 다음과 같이 테이블에 넣을 수 있습니다.
| A | B | C | D | E |
m1 | | | | | |
m2 | | | | | |
m3 | | | | | |
"switch"문 전략은이 테이블에서 한 번에 하나의 행을 구현합니다. 새 유형 F를 추가한다고 가정하십시오. 모든 구현을 수정하여 지원해야합니다.
클래스 기반 다형성 (C++, Java 등)을 사용하면 대신 전체 열을 구현할 수 있습니다. 이미 정의 된 클래스를 변경할 필요가 없으므로 새 유형을 추가하는 것이 쉽습니다. 그러나 새로운 방법을 추가하는 것은 어렵습니다. 다른 모든 유형에 추가해야하기 때문입니다.
멀티 메소드를 사용하면 서로 독립적으로 테이블의 단일 셀을 구현할 수 있습니다.
이 유연성은 다중 인수로 발송해야하는 경우 더 커집니다. 새로운 인수가있을 때마다이 테이블에 또 다른 차원이 추가되고 swich 기반 및 class 기반의 발송은 모두 매우 복잡해집니다 (방문자 패턴).
멀티 메소드는 실제로는 인수의 유형뿐만 아니라 거의 모든 것을 처리 할 수 있으므로 실제로는 훨씬 일반적인 것입니다.
if 문과 overglorified goto 사이에 그어진 선은 어디에 있습니까? – Kevin
http://stackoverflow.com/q/5986120/625403에 관심이있을 수 있습니다. 정확히 중복되지는 않지만 밀접하게 관련되어 있습니다. – amalloy