Expression Problem의 인스턴스가 있으며, 오늘날 대부분의 프로그래밍 언어에서 일반적인 확장 성 문제가 있습니다. 반사 또는 동적 호출은 그 주위에있는 방법이지만 특정 경로 아래로 코드를 실행할 때까지 이름 지정이나 매개 변수 유형에 실수를 알지 않으므로 버그가 발생하기 쉽습니다.
더 많은 유형 (더 많은 구현 IParametr
)과 더 많은 연산 (이 경우 더 많은 매개 변수 유형을 사용하는 메소드)을 지원하도록 애플리케이션을 확장하려고합니다.
그래서 기본적으로 유형 및 조작의 매트릭스가 표시됩니다. 예 :
Type Derived Derived2 ...
ParamX x x
ParamY x
...
Xes는 작업 (행)의 유형 (열)에서 구현해야하는 것을 나타냅니다.
구현 유형을 안전하게 유지하려면 Visitor 또는 Interpreter 패턴을 사용해야합니다. 각각에는 단점이 있습니다. double dispatch 활용
방문자 패턴 :
public class Derived : Base {
public override void X(ParamX x) { }
public override void X(ParamY a) { }
}
public abstract class Base : IXVisitor
{
public void Visit(IParametr parameter)
{
parameter.Accept(this);
}
public abstract void X(ParamX x);
public abstract void X(ParamY a);
}
public interface IXVisitor
{
void X(ParamX a);
void X(ParamY a);
}
public interface IParametr
{
void Accept(IXVisitor visitor);
}
public class ParamX : IParametr
{
public void Accept(IXVisitor visitor)
{
visitor.X(this);
}
}
public class ParamY : IParametr
{
public void Accept(IXVisitor visitor)
{
visitor.X(this);
}
}
당신이 얻을하려는 경우 정말 당신이 시도 할 수 하드 코어 Object Algebras
출처
2014-02-14 00:28:34
Bas