국가 디자인 패턴의 구성 및 구현을 사용하여

hamidreza haajhoseini :

나는이 링크를 읽고 여기에 링크 설명을 입력 상태 종로 patern입니다 내용.

인터페이스 클래스 :

public interface State {
    void doAction();
}

onState 클래스 :

public class TVStartState implements State {

    @Override
    public void doAction() {
        System.out.println("TV is turned ON");
    }
}

offState :

public class TVStopState implements State {

    @Override
    public void doAction() {
        System.out.println("TV is turned OFF");
    }

}

TvContext 클래스 :

public class TVContext implements State {

    private State tvState;

    public void setState(State state) {
        this.tvState=state;
    }

    public State getState() {
        return this.tvState;
    }

    @Override
    public void doAction() {
        this.tvState.doAction();
    }

}

테스트 클래스 :

public static void main(String[] args) {
    TVContext context = new TVContext();
    State tvStartState = new TVStartState();
    State tvStopState = new TVStopState();

    context.setState(tvStartState);
    context.doAction();


    context.setState(tvStopState);
    context.doAction();

}

지금은 두 가지 질문이있다 :

1 왜 TVContext 클래스 implements국가와는이 Compositiontoghether? OO의 버그인가? 때문에 예를위한 함께 동물 클래스 has_a 동물에서 고양이 상속 (이 경우).

2-경우이 TestClass에 통과의 마지막 프로그래머 컨텍스트context.setState()대신 tvStartState 또는 tvStopState는 , 프로그램이 성공적으로 컴파일하지만 RUN_TIME에서 오류가 발생했습니다.여기에 이미지 설명을 입력

두 번째 질문에 대해 국가 디자인 패턴, 대신 상속, same name method사용할 수 있습니다. 하지만 int로 장식 디자인 패턴을 하지.

빅터 오티즈 :
  1. TVContext클래스가 구현 State및 구성에 함께있다?

예제는 잘못, TVContext인터페이스를 구현하지합니다 State. 국가 디자인 패턴에 대한 UML 다이어그램에서 우리는 그 클래스가 볼 수있는 Context유일한 구현은 인터페이스 있다는 속성을 구성 State.

국가 디자인 패턴에 대한 UML 다이어그램

  1. 이 TestClass에의 마지막 프로그래머가 통과하면 문맥context.setState()대신 tvStartState 또는 tvStopState , 프로그램은 성공적으로 컴파일하지만 RUN_TIME에서 오류가 발생합니다.

The reason it compiles is because context is implementing interface State, but it fails in run-time with a java.lang.StackOverflowError because function context.setState() is recursively invoking itself with no exit condition. Removing the interface State from TVContext class fix this issue.

In Decorator Design Pattern the intent is to add new behavior to the Component class. That is why inheritance is used to add new methods to the Component.

에서 국가 디자인 패턴 의도는의 동작 변경하는 것입니다 상황에 맞는 클래스를. 예를 들어 우리는 대신 콘크리트 상태 클래스에 대한 작업이 추상 클래스에 정의 된 동작을 재정의해야 인터페이스의 추상 클래스와 상속을 사용하여 구현하는 경우. 인터페이스는이 경우에 더 의미가 이유입니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=199018&siteId=1