문제

State Pattern에 대해 읽었으며 이제는 Swing 응용 프로그램 (Exple : Calculator)을 탐색하여 내 지식을 더 많이 찾고 있습니다.

여기서 여기서는 그런 자습서를 찾을 수 있습니까?

스윙을 사용하는 정말 간단한 응용 프로그램을 보여 주어야합니다.나는 스윙 프로젝트에서 상태 패턴을 어떻게 사용할 수 있는지에 대해 혼란스러워합니까?

도움이 되었습니까?

해결책

계산기 응용 프로그램이 상태 패턴에 대해 좋은 일치임을 정말로 생각하지 않습니다.간단한 계산기에는 너무 많은 상태가 없으며 어쩌면 ON / OFF이지만 너무 사소합니다.도면 도구는 더 나은 일치입니다.

상태 패턴을 기반으로 계산기를 정말로 개발하고 싶다면 정말로 창의적 일 필요가 없습니다.하지만 왜 그렇지?기본 조작 (추가, 서브 actraction, 곱셈, Division)이 모드 (상태)가있는 계산기를 발명품 / 구현할 수 있습니다.

public enum Modes {ADDITION, SUBTRACTION, MULITPLICATION, DIVISION}

public interface Mode {
  double calculate(double a, double b);
}

public class AdditionMode implements Mode {
  public double calculate(double a, double b) {
    return (a+b);
  }
}
// similiar classes for other math operation modes

public class Calculator {
  private Mode mode;
  public setMode(Modes mode) {
    switch (mode) {
      case ADDITION: this.mode = new AdditionMode();
      // ...
    }
  }
  public double calculate(double a, double b) {
    return mode.calculate(a, b);
  }
}
.

이것은 매우 간단하고 기본 초안이며 물론보기 부품을 다루지 않습니다 (스윙 대화 상자 또는 뭐든간에).대화 상자에서 4 개의 라디오 버튼을 사용하여 모드를 설정할 수 있습니다. 텍스트 필드는 입력 및 텍스트 필드 또는 레이블을 캡처하여 실제 결과를 인쇄합니다.

다른 팁

나는 스윙 어플리케이션 에서이 패턴을 사용하여 선택된 도면 도구 (선, 다각형 등)를 나타냅니다.

이 방식으로 상태 패턴을 사용하는 완전한 응용 프로그램은 jhotdraw

입니다.

편집 : 계산기의 경우, 디스플레이 된 그래프의 확대 / 축소 및 이동을 위해 계산 모드 (== 상태) 및 그래프 드로잉 모드 (2 차 상태)에서 키 입력 (입력 된 자리 및 연산자)을 매핑하는 데 사용할 수 있습니다. DEG, RAD 및 GRA (도, 라디안)와 같은 모드를 나타내는 것은 상태 패턴을 사용하지 않아야합니다.이것은 설계 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top