Skip to content

Instantly share code, notes, and snippets.

@aboglioli
Created August 27, 2016 23:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aboglioli/81fd9f8ff47b18d556fcc4cfbec90030 to your computer and use it in GitHub Desktop.
Save aboglioli/81fd9f8ff47b18d556fcc4cfbec90030 to your computer and use it in GitHub Desktop.
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