Notas de patrón de diseño 22 - Modo de estado (estado)

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.

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_22059611/article/details/103306293
Recomendado
Clasificación