El uso de Composición e Implementación de Diseño Estado del patrón

Hamidreza haajhoseini:

He leído este enlace entrar Descripción enlace aquí , para aprender Estado Desing Paterno.

clase de interfaz:

public interface State {
    void doAction();
}

onState clase:

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 Clase:

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();
    }

}

Clase de prueba:

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();

}

Ahora tengo dos preguntas:

1- qué clase TVContext implementsEstado y tiene CompositionJuntos? es un error en OO? porque por ejemplo hereda del gato de la clase de animal y animal has_a juntos (en este caso).

2-Si el programador final en este paso TestClass contexto de context.setState()lugar de tvStartState o tvStopState , programa compila correctamente, pero error en ejec.introducir descripción de la imagen aquí

Para la segunda pregunta en Diseño Estado del patrón, en lugar de la herencia, same name methodse puede utilizar. pero int diseño de la decoración del patrón no.

Víctor Ortiz:
  1. ¿Por TVContextimplementa la clase Statey tiene la composición juntos?

El ejemplo es incorrecta, TVContextno debe implementar la interfaz State. A partir del diagrama UML para el diseño del modelo de Estado, podemos ver que la clase Contextúnica componer un atributo que implementa la interfaz State.

diagrama UML para el diseño del modelo de Estado

  1. Si el programador final en este TestClass pasar contexto de context.setState()cambio tvStartState o tvStopState , el programa se compila correctamente, pero los errores en ejec.

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.

En Diseño Estado del patrón la intención es cambiar el comportamiento del Contexto clase. Por ejemplo si ponemos en práctica usando la herencia con una clase abstracta en lugar de la interfaz de la operación en las clases de estado de hormigón necesita para anular la operación definida en la clase abstracta. Es por ello que una interfaz tiene más sentido en este caso.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=199023&siteId=1
Recomendado
Clasificación