en informàtica, un patró de disseny conductual From Wikipedia, the free encyclopedia
El patró estat, que està molt lligat al patró d'estratègia, és un patró de disseny de comportament. S'utilitza en programació quan es vol encapsular el comportament d'un objecte segons l'estat intern del mateix objecte. Aquesta és possiblement la manera més neta de canviar el comportament d'un objecte en temps d'execució sense recórrer a declaracions condicionals monolítiques important i així millorar el manteniment.[1]
L'interfície Estat i dues implementacions. El mètode de l'estat té una referència a l'objecte de context i és capaç de canviar el seu estat.
interface Statelike {
void writeName(StateContext context, String nom);
}
class StateLowerCase implements Statelike {
@Override
public void writeName(final StateContext context, final String nom) {
System.out.println(nom.toLowerCase());
context.setState(new StateMultipleUpperCase());
}
}
class StateMultipleUpperCase implements Statelike {
/** Contador local del seu estat */
private int count = 0;
@Override
public void writeName(final StateContext context, final String nom) {
System.out.println(nom.toUpperCase());
/* Canvia el seu estat després que s'invoqui writeName() de la classe StateMultipleUpperCase dues vegades */
if(++count > 1) {
context.setState(new StateLowerCase());
}
}
}
La classe de context té una variable estat que el instancia el seu estat inicial, en aquest cas StateLowerCase.
En el seu mètode, utilitza els mètodes corresponents de l'estat de l'objecte.
class StateContext {
private Statelike myState;
StateContext() {
setState(new StateLowerCase());
}
/**
* Mètode Setter de l'estat.
* Normalment només es invocada per classes que implementen la interfície Estat.
* @param newState el nou estat del context
*/
void setState(final Statelike newState) {
myState = newState;
}
public void writeName(final String nom) {
myState.writeName(this, nom);
}
}
El codi de sota és la demostració d'ús:
public class DemoOfClientState {
public static void main(String[] args) {
final StateContext sc = new StateContext();
sc.writeName("Dilluns");
sc.writeName("Dimarts");
sc.writeName("Dimecres");
sc.writeName("Dijous");
sc.writeName("Divendres");
sc.writeName("Dissabte");
sc.writeName("Diumenge");
}
}
Si s'ha seguit el codi superior, la sortida del main() de la classe públicaDemoOfClientState
hauria de ser:
Dilluns DIMARTS DIMECRES Dijous DIVENDRES DISSABTE Diumenge
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.