Está en la página 1de 12

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS

Integrantes:
Edwin Aarón Garcia Pulido – 20161020051
Andres Felipe Rentería Velandia – 20161020058
Jhon Sebastian Pulido Peña – 20161020020

Asignatura:
Modelos de Programación I

Tema:
Patrón Plantilla

Ciudad:
Bogotá D.C

Año: 15/10/2017
Planteamiento del Problema
El usuario escoge el transporte que mejor le parezca (Ya sea por comodidad,
efectividad o rapidez), y hace el mismo procedimiento sin importar cuál sea el
transporte que escogió (Estos son: Transmilenio, SITP y Transporte Municipal).
El objetivo del programa es hacer todo el procedimiento correspondiente, sin importar
cuál sea el transporte escogido y mostrar cual fue el transporte que escogió el usuario.
¿Cómo se puede resolver esto mediante el Patrón Plantilla?

Solución
Diagrama UML:
Clases:
PruebaPlantilla (Main):
package plantilla;

import entrada_salida.*;

public class PruebaPlantilla {

public static void main(String[] args) {


String[] tiposTransporte = { "Transmilenio", "SITP", "Transporte
Municipal" };
PlantillaTransporte transporte = null;
Entrada lector = new EConsola();
Salida salida = new SConsola();
salida.writeText("Escriba el tipo de transporte que desea
tomar:");
for (int i = 0; i < tiposTransporte.length; i++) {
salida.writeText("(" + i + ") " + tiposTransporte[i]);
}

int opcion = lector.readNumber();


int saldo = 0;
int fila = 0;
int asiento = 0;

if (opcion < 2) {
salida.writeText("¿Cuánto saldo tiene su tarjeta
TuLlave?");
saldo = lector.readNumber();
} else if (opcion == 2) {
salida.writeText("¿En qué asiento desea sentarse?");
salida.writeText("Escriba la fila (En números)");
fila = lector.readNumber();
salida.writeText("Escriba el asiento (En números)");
asiento = lector.readNumber();
}

salida.writeText("Escriba el lugar de origen: ");


String origen = lector.readText();

salida.writeText("Escriba el lugar de destino: ");


String destino = lector.readText();

switch (opcion) {
case 0:
transporte = new Transmilenio(new TarjetaTuLlave(saldo),
salida, origen, destino);
break;

case 1:
transporte = new SITP(new TarjetaTuLlave(saldo), salida,
origen, destino);
break;

case 2:
transporte = new TransporteMunicipal(salida, origen,
destino, fila, asiento);
break;

default:
salida.writeText("La opción escogida es inválida");
break;
}
try {
transporte.viajar();
transporte.salida.writeText("\n\nEl transporte usado fue:
" + tiposTransporte[opcion]);
} catch (NullPointerException e) {
// TODO: handle exception
}
}
}

PlantillaTransporte (Abstracta):
package plantilla;

import entrada_salida.Salida;

public abstract class PlantillaTransporte {


protected String origen;
protected String destino;
protected Salida salida = null;
protected int tarifa;

final void viajar() {


pagarPasaje();
entrarASistema();
bajarse();
}

public PlantillaTransporte(Salida salida, String origen, String


destino, int tarifa) {
this.salida = salida;
this.origen = origen;
this.destino = destino;
this.tarifa = tarifa;
}

protected abstract void pagarPasaje();

protected abstract void entrarASistema();

protected abstract void bajarse();


}

SITP:
package plantilla;

import entrada_salida.Salida;

public class SITP extends PlantillaTransporte {


private TarjetaTuLlave tarjeta = null;
public SITP(TarjetaTuLlave tarjetita, Salida salida, String
paradaEntrada,String paradaSalida) {
super(salida,paradaEntrada,paradaSalida,2000);
tarjeta = tarjetita;
}

@Override
protected void pagarPasaje() {
tarjeta.saldo = tarjeta.saldo - tarifa;
salida.writeText("El saldo restante es de: " +tarjeta.saldo);
}

@Override
protected void entrarASistema() {
salida.writeText("Estás en la parada " + origen);
}

@Override
protected void bajarse() {
salida.writeText("Te bajas en la parada " + destino);
}
}

Transmilenio:

package plantilla;

import entrada_salida.Salida;

public class Transmilenio extends PlantillaTransporte {


private TarjetaTuLlave tarjeta = null;

public Transmilenio(TarjetaTuLlave tarjetita, Salida salida, String


estacionEntrada, String estacionSalida) {
super(salida, estacionEntrada, estacionSalida,2200);
tarjeta = tarjetita;
}

@Override
protected void pagarPasaje() {
tarjeta.saldo = tarjeta.saldo - tarifa;
salida.writeText("El saldo restante es de: " + tarjeta.saldo);
}

@Override
protected void entrarASistema() {
salida.writeText("Estás en la estación " + origen);
}

@Override
protected void bajarse() {
salida.writeText("Sales de la estación " + destino);
}

public void setDestino(String destino) {


this.destino = destino;
}
}
TransporteMunicipal:

package plantilla;

import java.awt.Point;

import entrada_salida.Salida;

public class TransporteMunicipal extends PlantillaTransporte {


private Point puesto = null;

public TransporteMunicipal(Salida salida, String ciudadOrigen, String


ciudadDestino, int fila, int asiento) {
super(salida, ciudadOrigen, ciudadDestino,(Math.round((float)
Math.random()*10) + 10) * 1000);
puesto = new Point(fila, asiento);
}

@Override
protected void pagarPasaje() {
salida.writeText("El pasaje costó " + tarifa);
}

@Override
protected void entrarASistema() {
salida.writeText("Usted está en " + origen);
salida.writeText("Su asiento es:\t" + (int) puesto.getX() + " -
" + (int) puesto.getY());
}

@Override
protected void bajarse() {
salida.writeText("Bienvenido a " + destino);
}

TarjetaTuLLave:
package plantilla;

public class TarjetaTuLlave {


public int saldo;
public TarjetaTuLlave(int saldo){
this.saldo=saldo;
}
}

Entrada (Abstracta):
//Clase Abstracta de la Entrada de datos

package entrada_salida;

public abstract class Entrada implements ComunicacionEntrada {


public void open();

public String readText();

public int readNumber();

public double readDouble();

public float readFloat();


}

Salida (Abstracta):

//Clase Abstracta de la Salida de datos

package entrada_salida;

public abstract class Salida implements ComunicacionSalida {


public void close();

public void writeText(String text, boolean linea);

public void writeDouble(double number, boolean linea);

public void writeFloat(float number, boolean linea);

public void writeNumber(int number, boolean linea);

public void writeText(String text);

public void writeDouble(double number);

public void writeFloat(float number);

public void writeNumber(int number);


}

EConsola:
//Clase para lectura desde la consola

package entrada_salida;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class EConsola extends Entrada {


public BufferedReader lector;
public EConsola(){
lector=new BufferedReader(new InputStreamReader(System.in));
}
@Override
public void open() { }

@Override
public String readText() {
String text="";
try {
text = lector.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return text;
}

@Override
public int readNumber() {
int number=-1;
try {
number=Integer.parseInt(lector.readLine());
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}

@Override
public double readDouble() {
double number=-1;
try {
number=Double.parseDouble(lector.readLine());
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}

@Override
public float readFloat() {
float number=-1;
try {
number=Float.parseFloat(lector.readLine());
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}

EArchivo:

//Clase para lectura de Archivos Planos

package entrada_salida;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class EArchivo extends Entrada {


public DataInputStream file;
public String ruta;

public EArchivo(String ruta) {


this.ruta = ruta;
open();
}

@Override
public void open() {
try {
file = new DataInputStream(new FileInputStream(ruta));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public String readText() {
String text = null;
try {
text = file.readUTF();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return text;
}

@Override
public int readNumber() {
int number = -1;
try {
number = file.readInt();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}

@Override
public double readDouble() {
double number = -1;
try {
number = file.readDouble();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}

@Override
public float readFloat() {
float number = -1;
try {
number = file.readFloat();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}
}

SConsola:

//Clase para escritura desde la consola

package entrada_salida;

public class SConsola extends Salida {

@Override
public void close() {
}

@Override
public void writeText(String text, boolean linea) {
if (linea) {
System.out.println(text);
} else {
System.out.print(text);
}
}

@Override
public void writeDouble(double number) {
System.out.println(number);
}

@Override
public void writeFloat(float number) {
System.out.println(number);
}

@Override
public void writeNumber(int number) {
System.out.println(number);
}

@Override
public void writeDouble(double number, boolean linea) {
if (linea) {
System.out.println(number);
} else {
System.out.print(number);
}
}

@Override
public void writeFloat(float number, boolean linea) {
if (linea) {
System.out.println(number);
} else {
System.out.print(number);
}
}

@Override
public void writeNumber(int number, boolean linea) {
if (linea) {
System.out.println(number);
} else {
System.out.print(number);
}
}

@Override
public void writeText(String text) {
System.out.println(text);
}

SArchivo:

//Clase para la escritura de Archivos Planos

package entrada_salida;

import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class SArchivo extends Salida {


public DataOutputStream file;

public SArchivo(String ruta) {


try {
file = new DataOutputStream(new FileOutputStream(ruta));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void close() {
try {
file.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void writeText(String text, boolean linea) {
}

@Override
public void writeDouble(double number, boolean linea) {
}

@Override
public void writeFloat(float number, boolean linea) {
}

@Override
public void writeNumber(int number, boolean linea) {
}

@Override
public void writeText(String text) {
try {
file.writeUTF(text);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void writeDouble(double number) {
try {
file.writeDouble(number);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void writeFloat(float number) {
try {
file.writeFloat(number);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void writeNumber(int number) {
try {
file.writeInt(number);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

También podría gustarte