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 implements
Estado y tiene Composition
Juntos? 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.
Para la segunda pregunta en Diseño Estado del patrón, en lugar de la herencia, same name method
se puede utilizar. pero int diseño de la decoración del patrón no.
- ¿Por
TVContext
implementa la claseState
y tiene la composición juntos?
El ejemplo es incorrecta, TVContext
no 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
.
- 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.