Problema de sorteo de aplicaciones
Escriba un programa para completar la lotería de la aplicación. Los requisitos específicos son los siguientes:
1) Si se le restan 50 puntos al usuario cada vez que participa en esta actividad, la probabilidad de ganar es del 10%
2) El número de premios es fijo, y no habrá sorteo después del sorteo.
3) Hay cuatro estados en el evento: se puede dibujar, no se puede dibujar, dar premios y terminar de recibir premios
4) Cuatro diagramas de transición de estado de actividades
introducción básica
1) Patrón de estado: se utiliza principalmente para resolver el problema de que el objeto necesita mostrar diferentes comportamientos cuando pasa de un estado a otro. Existe una correspondencia uno a uno entre el estado y el comportamiento, y los estados se pueden convertir entre sí.
2) Cuando el estado interno de un objeto cambia, permitiendo que cambie su comportamiento , el objeto parece cambiar su clase
Estado Modo Principio Clase Diagrama
Explicación del diagrama de clase principal, es decir (roles y responsabilidades del modo estatal)
1) La clase Contexto es un rol ambiental, utilizado para mantener la instancia de Estado, que define el estado actual
2) Estado es un rol de estado abstracto, que define una interfaz para encapsular comportamientos relacionados con una interfaz característica de Contexto
3) ConcreteState tiene un rol de estado específico, y cada subclase implementa un comportamiento relacionado con un estado de Contexto
Código central:
public static void main(String[] args) { // TODO Método generado automáticamente stub // crear objeto de actividad, hay 1 premio RaffleActivity actividad = new RaffleActivity(1);
// Sorteamos 300 premios seguidos
para (int i = 0; i < 30; i++) { System.out.println("-------" + (i + 1) + "th sorteo- - --------"); // Participa en la lotería, el primer paso es hacer clic para descontar puntos actividad.debuctMoney();
// El segundo paso de
la actividad de sorteo de lotería.raffle();
}
}
Y cada vez que se llama al método activity.debuctMoney(), en realidad se llama al método state
//deducir puntos, llamar al estado actual deductMoney
public void debugMoney(){ state.deductMoney(); }
state.deductMoney() dará un método de implementación irrazonable de acuerdo con el objeto de estado:
// Se han deducido puntos y no se pueden deducir más puntos
@Override
public void deductMoney() { System.out.println("Se han deducido puntos "); }
De esta manera, cuando se cambia el estado, también cambia el comportamiento.
public static void main(String[] args) {
// TODO stub de método generado automáticamente
// Crea un objeto de evento, el premio tiene 1 premio
RaffleActivity actividad = new RaffleActivity(1);
// Sorteamos 300 premios seguidos
para (int i = 0; i < 30; i++) {
System.out.println("-------th" + (i + 1) + "lotería de tiempo----------");
// Participa en la lotería, el primer paso es hacer clic para descontar puntos
actividad.debuctMoney();
// dibujo del segundo paso
actividad.rifa();
}
}
Y cada vez que se llama al método activity.debuctMoney(), en realidad se llama al método state
// Deducir puntos, llamar a deductMoney en el estado actual
public void debuctMoney(){
estado.deducirDinero();
}
state.deductMoney() proporcionará métodos de implementación irrazonables de acuerdo con el objeto de estado:
// Se han deducido puntos, no más deducciones
@Anular
public void deductMoney() {
System.out.println("Se han descontado puntos");
}
De esta manera, cuando se cambia el estado, también cambia el comportamiento.