Created
August 27, 2016 23:48
-
-
Save aboglioli/81fd9f8ff47b18d556fcc4cfbec90030 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Random; | |
import java.util.Scanner; | |
/** | |
* Esto resuelve un problema: | |
* La entrada del usuario la tenemos en una clase aparte a lo que es ejecutar | |
* las acciones que se corresponden con la entrada del usuario. De acuerdo a | |
* nuestra entrada se crea un objeto que representa nuestra acción, el cual nos | |
* permitirá ejecutarla. | |
* Si, de acuerdo a nuestra entrada, se pueden ejecuta mútilples acciones y a su | |
* vez obtenerEntrada() nos devuelve la clase a ejecutar, no tenemos forma de | |
* manejar tantas acciones si no es a través de algo común que tengan entre | |
* ellas: en este caso, un método que estamos seguro que van a contener todas | |
* las acciones, el cual es ejecutar(). | |
* obtenerEntrada() nos puede devolver un sólo tipo de dato, pero tenemos tres | |
* acciones distintas: AccionHola, AccionSuma, AccionVector. | |
* | |
* ¿Cómo gestionamos esto? | |
* Accion como clase padre nos asegura que siempre tendrá el método ejecutar() | |
* tanto ella como sus hijos, por eso mismo obtenerEntrada() nos devolverá un | |
* objeto del tipo Accion, ya que es el común para cualquier acción que se cree | |
* por la entrada del usuario. Luego de obtener un objeto Accion, puedo | |
* ejecutarlo llamando a ejecutar(). | |
*/ | |
class Accion { | |
public void ejecutar() { | |
System.out.println("No hay acción para realizar"); | |
} | |
} | |
class AccionHola extends Accion { | |
public void ejecutar() { | |
System.out.println("Hola"); | |
} | |
} | |
class AccionSuma extends Accion { | |
public void ejecutar() { | |
System.out.println(2 + 2); | |
} | |
} | |
class AccionVector extends Accion { | |
public String caracterAleatorio() { | |
Random r = new Random(); | |
// posibles caracteres | |
String caracteres = "123xyzasdqwezxcASDZXCQWEGHJ"; | |
// número aleatorio entre 0 y 6 (cantidad de posibles caracteres) | |
int numeroAleatorio = r.nextInt(caracteres.length()); | |
// obtiene caracter en la posición del número aleatorio dentro del String de | |
// caracteres "123xyz" | |
char caracter = caracteres.charAt(numeroAleatorio); | |
// convierte caracter en String y devuelve | |
return String.valueOf( caracter ); | |
} | |
public void ejecutar() { | |
String[] vec = new String[100]; | |
for (int i = 0; i < vec.length; i++) { | |
vec[i] = this.caracterAleatorio(); | |
System.out.print(vec[i] + "; "); | |
} | |
System.out.println(); | |
} | |
} | |
class GestionadorEntradaUsuario { | |
public Accion obtenerEntrada() { | |
System.out.println("1> Imprimir 'hola'."); | |
System.out.println("2> Mostrar suma de 2 + 2."); | |
System.out.println("3> Crear y mostrar vector de 100 elementos."); | |
System.out.print("Ingrese una opción del menú: "); | |
Scanner sc = new Scanner(System.in); | |
int opcion = sc.nextInt(); | |
switch(opcion) { | |
case 1: | |
return new AccionHola(); | |
case 2: | |
return new AccionSuma(); | |
case 3: | |
return new AccionVector(); | |
default: | |
return new Accion(); | |
} | |
} | |
} | |
public class EjemploAccionador { | |
public static void main(String[] args) { | |
GestionadorEntradaUsuario entrada = new GestionadorEntradaUsuario(); | |
Accion accionSeleccionada = entrada.obtenerEntrada(); | |
accionSeleccionada.ejecutar(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment