commit
b66de16c31
@ -0,0 +1,15 @@ |
|||||||
|
package patronChainOfResponsibility; |
||||||
|
|
||||||
|
public class DirectivoPCompra extends PoderDeCompra{ |
||||||
|
private final int PERMISIBLE = 10 * base; |
||||||
|
@Override |
||||||
|
public void procesarPeticion(PeticionDeCompra peticion) { |
||||||
|
if( peticion.getImporte() < PERMISIBLE) { |
||||||
|
System.out.println("El directivo puede aprobar la cantidad de "+ peticion.getImporte() +" euros."); |
||||||
|
}else if(sucesor!= null) { |
||||||
|
sucesor.procesarPeticion(peticion); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package patronChainOfResponsibility; |
||||||
|
|
||||||
|
public class DirectorPCompra extends PoderDeCompra{ |
||||||
|
private final int PERMISIBLE = 20 * base; |
||||||
|
@Override |
||||||
|
public void procesarPeticion(PeticionDeCompra peticion) { |
||||||
|
if( peticion.getImporte() < PERMISIBLE) { |
||||||
|
System.out.println("El director puede aprobar la cantidad de "+ peticion.getImporte()+" euros."); |
||||||
|
}else if(sucesor!= null) { |
||||||
|
sucesor.procesarPeticion(peticion); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package patronChainOfResponsibility; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
DirectivoPCompra directivo = new DirectivoPCompra(); |
||||||
|
DirectorPCompra director = new DirectorPCompra(); |
||||||
|
VicePresidentePCompra vicepresidente = new VicePresidentePCompra(); |
||||||
|
PresidentePCompra presidente = new PresidentePCompra(); |
||||||
|
|
||||||
|
directivo.setSucesor(director); |
||||||
|
director.setSucesor(vicepresidente); |
||||||
|
vicepresidente.setSucesor(presidente); |
||||||
|
|
||||||
|
//Hacemos 4 peticiones de compra con diferentes gastos
|
||||||
|
PeticionDeCompra p1 = new PeticionDeCompra(1,700,"Comida"); |
||||||
|
PeticionDeCompra p2 = new PeticionDeCompra(2,8000,"Viaje"); |
||||||
|
PeticionDeCompra p3 = new PeticionDeCompra(3,16000,"Moto"); |
||||||
|
PeticionDeCompra p4 = new PeticionDeCompra(4,22000,"Coche"); |
||||||
|
PeticionDeCompra p5 = new PeticionDeCompra(4,66000,"Yate"); |
||||||
|
|
||||||
|
//Llamamos a procesarPeticion para averiguar quien puede aprobarla.
|
||||||
|
directivo.procesarPeticion(p1); |
||||||
|
directivo.procesarPeticion(p2); |
||||||
|
directivo.procesarPeticion(p3); |
||||||
|
directivo.procesarPeticion(p4); |
||||||
|
directivo.procesarPeticion(p5); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package patronChainOfResponsibility; |
||||||
|
|
||||||
|
public class PeticionDeCompra { |
||||||
|
private int numero; |
||||||
|
private int importe; |
||||||
|
private String proposito; |
||||||
|
|
||||||
|
public PeticionDeCompra(int numero, int importe,String proposito) { |
||||||
|
this.numero=numero; |
||||||
|
this.importe = importe; |
||||||
|
this.proposito=proposito; |
||||||
|
} |
||||||
|
|
||||||
|
public int getNumero() { |
||||||
|
return numero; |
||||||
|
} |
||||||
|
|
||||||
|
public int getImporte() { |
||||||
|
return importe; |
||||||
|
} |
||||||
|
|
||||||
|
public String getProposito() { |
||||||
|
return proposito; |
||||||
|
} |
||||||
|
|
||||||
|
public void setNumero(int numero) { |
||||||
|
this.numero = numero; |
||||||
|
} |
||||||
|
|
||||||
|
public void setImporte(int importe) { |
||||||
|
this.importe = importe; |
||||||
|
} |
||||||
|
|
||||||
|
public void setProposito(String proposito) { |
||||||
|
this.proposito = proposito; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package patronChainOfResponsibility; |
||||||
|
|
||||||
|
//Esta clase es el MANEJADOR
|
||||||
|
public abstract class PoderDeCompra { |
||||||
|
protected final int base = 500; |
||||||
|
protected PoderDeCompra sucesor; |
||||||
|
|
||||||
|
public void setSucesor(PoderDeCompra sucesor) { |
||||||
|
this.sucesor = sucesor; |
||||||
|
} |
||||||
|
|
||||||
|
public abstract void procesarPeticion(PeticionDeCompra peticion); |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package patronChainOfResponsibility; |
||||||
|
|
||||||
|
public class PresidentePCompra extends PoderDeCompra{ |
||||||
|
private final int PERMISIBLE = 60 * base; |
||||||
|
@Override |
||||||
|
public void procesarPeticion(PeticionDeCompra peticion) { |
||||||
|
if( peticion.getImporte() < PERMISIBLE) { |
||||||
|
System.out.println("El presidente puede aprobar la cantidad de "+ peticion.getImporte()+" euros."); |
||||||
|
}else{ |
||||||
|
if(sucesor!= null) { |
||||||
|
sucesor.procesarPeticion(peticion); |
||||||
|
}else { |
||||||
|
System.out.println("La cantidad de " + peticion.getImporte() + " euros debe ser aprobada por un equipo de dirección"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package patronChainOfResponsibility; |
||||||
|
|
||||||
|
public class VicePresidentePCompra extends PoderDeCompra{ |
||||||
|
|
||||||
|
private final int PERMISIBLE = 40 * base; |
||||||
|
@Override |
||||||
|
public void procesarPeticion(PeticionDeCompra peticion) { |
||||||
|
if( peticion.getImporte() < PERMISIBLE) { |
||||||
|
System.out.println("El vicepresidente puede aprobar la cantidad de "+ peticion.getImporte()+" euros."); |
||||||
|
}else if(sucesor!= null) { |
||||||
|
sucesor.procesarPeticion(peticion); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package patronCommand; |
||||||
|
|
||||||
|
//es el INVOCADOR
|
||||||
|
//tiene 2 instancias de orden concretas almacenadas.
|
||||||
|
public class Interruptor { |
||||||
|
private Orden ordenEncender; |
||||||
|
private Orden ordenApagar; |
||||||
|
|
||||||
|
public Interruptor(Orden ordenEncender, Orden ordenApagar) { |
||||||
|
this.ordenEncender = ordenEncender; |
||||||
|
this.ordenApagar = ordenApagar; |
||||||
|
} |
||||||
|
|
||||||
|
public void encender() { |
||||||
|
ordenEncender.ejecutar(); |
||||||
|
} |
||||||
|
|
||||||
|
public void apagar() { |
||||||
|
ordenApagar.ejecutar(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package patronCommand; |
||||||
|
|
||||||
|
//es la clase RECEPTOR, la luz representa por ejemplo una bombilla
|
||||||
|
//tiene los metodos que ejecutan las ordenes
|
||||||
|
public class Luz { |
||||||
|
|
||||||
|
public void encenderLuz() { |
||||||
|
System.out.println("La luz esta encendida"); |
||||||
|
} |
||||||
|
|
||||||
|
public void apagarLuz() { |
||||||
|
System.out.println("La luz esta apagada"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package patronCommand; |
||||||
|
|
||||||
|
//Esta clase seria el Cliente, que pulsa el interruptor.
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
//instancia del RECEPTOR.
|
||||||
|
//Llamada bombilla por facilitar entender el programa.
|
||||||
|
Luz bombilla = new Luz(); |
||||||
|
|
||||||
|
//intancias de las ordenes concretas
|
||||||
|
Orden interruptorUp = new OrdenEncender(bombilla); |
||||||
|
Orden interruptorDown = new OrdenApagar(bombilla); |
||||||
|
|
||||||
|
//instancia del INVOCADOR pasandole las ordenes concretas.
|
||||||
|
Interruptor i = new Interruptor(interruptorUp,interruptorDown); |
||||||
|
|
||||||
|
i.encender(); |
||||||
|
i.apagar(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronCommand; |
||||||
|
|
||||||
|
public interface Orden { |
||||||
|
void ejecutar(); |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package patronCommand; |
||||||
|
|
||||||
|
//esta clase es una Orden Concreta.
|
||||||
|
//almacena una instancia del receptor sobre el que invoca la accion.
|
||||||
|
public class OrdenApagar implements Orden{ |
||||||
|
private Luz luz; |
||||||
|
|
||||||
|
public OrdenApagar(Luz luz) { |
||||||
|
this.luz = luz; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void ejecutar() { |
||||||
|
luz.apagarLuz(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package patronCommand; |
||||||
|
|
||||||
|
//esta clase es una Orden Concreta.
|
||||||
|
//almacena una instancia del receptor sobre el que invoca la accion.
|
||||||
|
public class OrdenEncender implements Orden{ |
||||||
|
private Luz luz; |
||||||
|
|
||||||
|
public OrdenEncender(Luz luz) { |
||||||
|
this.luz = luz; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void ejecutar() { |
||||||
|
luz.encenderLuz(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package patronInterpreter; |
||||||
|
|
||||||
|
//Nuestro contexto es una sentencia del lenguaje a analizar.
|
||||||
|
public class Context { |
||||||
|
private String input; |
||||||
|
private int output; |
||||||
|
|
||||||
|
public Context(String input) |
||||||
|
{ |
||||||
|
this.input = input; |
||||||
|
} |
||||||
|
|
||||||
|
public String getInput() |
||||||
|
{ |
||||||
|
return input; |
||||||
|
} |
||||||
|
|
||||||
|
public void setInput(String input) |
||||||
|
{ |
||||||
|
this.input = input; |
||||||
|
} |
||||||
|
|
||||||
|
public int getOutput() |
||||||
|
{ |
||||||
|
return output; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOutput(int output) |
||||||
|
{ |
||||||
|
this.output = output; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
package patronInterpreter; |
||||||
|
|
||||||
|
//Esta clase es la encargada de interpretar el contexto.
|
||||||
|
public abstract class Expression { |
||||||
|
public void interpret(Context context) |
||||||
|
{ |
||||||
|
if (context.getInput().length() == 0) |
||||||
|
return; |
||||||
|
|
||||||
|
if (context.getInput().startsWith(nine())) |
||||||
|
{ |
||||||
|
context.setOutput(context.getOutput() + (9 * multiplier())); |
||||||
|
context.setInput(context.getInput().substring(2)); |
||||||
|
} |
||||||
|
else if (context.getInput().startsWith(four())) |
||||||
|
{ |
||||||
|
context.setOutput(context.getOutput() + (4 * multiplier())); |
||||||
|
context.setInput(context.getInput().substring(2)); |
||||||
|
} |
||||||
|
else if (context.getInput().startsWith(five())) |
||||||
|
{ |
||||||
|
context.setOutput(context.getOutput() + (5 * multiplier())); |
||||||
|
context.setInput( context.getInput().substring(1)); |
||||||
|
} |
||||||
|
|
||||||
|
while (context.getInput().startsWith(one())) |
||||||
|
{ |
||||||
|
context.setOutput(context.getOutput() + (1 * multiplier())); |
||||||
|
context.setInput(context.getInput().substring(1)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public abstract String one(); |
||||||
|
public abstract String four(); |
||||||
|
public abstract String five(); |
||||||
|
public abstract String nine(); |
||||||
|
public abstract int multiplier(); |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package patronInterpreter; |
||||||
|
|
||||||
|
public class HundredExpression extends Expression{ |
||||||
|
public String one() { return "C"; } |
||||||
|
public String four(){ return "CD"; } |
||||||
|
public String five(){ return "D"; } |
||||||
|
public String nine(){ return "CM"; } |
||||||
|
public int multiplier() { return 100; } |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package patronInterpreter; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
import java.util.Iterator; |
||||||
|
|
||||||
|
//esta clase seria el cliente
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
String roman = "MCMXXVIII"; |
||||||
|
Context context = new Context(roman); |
||||||
|
|
||||||
|
//Construye el árbol sintáctico
|
||||||
|
ArrayList<Expression> tree = new ArrayList<Expression>(); |
||||||
|
tree.add(new ThousandExpression()); |
||||||
|
tree.add(new HundredExpression()); |
||||||
|
tree.add(new TenExpression()); |
||||||
|
tree.add(new OneExpression()); |
||||||
|
|
||||||
|
// Interpretar: recorre todas las Expresiones del árbol.
|
||||||
|
for (Iterator it = tree.iterator(); it.hasNext();){ |
||||||
|
Expression exp = (Expression)it.next(); |
||||||
|
exp.interpret(context); |
||||||
|
} |
||||||
|
|
||||||
|
System.out.println(roman + " = " + Integer.toString(context.getOutput())); |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,9 @@ |
|||||||
|
package patronInterpreter; |
||||||
|
|
||||||
|
public class OneExpression extends Expression{ |
||||||
|
public String one() { return "I"; } |
||||||
|
public String four(){ return "IV"; } |
||||||
|
public String five(){ return "V"; } |
||||||
|
public String nine(){ return "IX"; } |
||||||
|
public int multiplier() { return 1; } |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package patronInterpreter; |
||||||
|
|
||||||
|
public class TenExpression extends Expression{ |
||||||
|
public String one() { return "X"; } |
||||||
|
public String four(){ return "XL"; } |
||||||
|
public String five(){ return "L"; } |
||||||
|
public String nine(){ return "XC"; } |
||||||
|
public int multiplier() { return 10; } |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package patronInterpreter; |
||||||
|
|
||||||
|
public class ThousandExpression extends Expression{ |
||||||
|
public String one() { return "M"; } |
||||||
|
public String four(){ return " "; } |
||||||
|
public String five(){ return " "; } |
||||||
|
public String nine(){ return " "; } |
||||||
|
public int multiplier() { return 1000; } |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package patronIterator; |
||||||
|
|
||||||
|
public class IteradorVector { |
||||||
|
private int[] datosVector; |
||||||
|
private int posicion; |
||||||
|
|
||||||
|
public IteradorVector(Vector vector) { |
||||||
|
datosVector = vector.getDatos(); |
||||||
|
this.posicion = 0; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean hasNext() { |
||||||
|
if(posicion < datosVector.length){ |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
public Object next(){ |
||||||
|
int valor = datosVector[posicion]; |
||||||
|
posicion++; |
||||||
|
return valor; |
||||||
|
} |
||||||
|
|
||||||
|
public void reset() { |
||||||
|
posicion=0; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package patronIterator; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
//creamos un vector de 5 espacios
|
||||||
|
Vector vector = new Vector(5); |
||||||
|
//creamos un iterador para dicho vector.
|
||||||
|
IteradorVector iterador = vector.iterador(); |
||||||
|
|
||||||
|
//mientras queden elementos en el vector por recorrer
|
||||||
|
while(iterador.hasNext()) { |
||||||
|
System.out.println(iterador.next()); //los muestras
|
||||||
|
} |
||||||
|
|
||||||
|
iterador.reset(); //nos devuelve a la primera posicion del vector.
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package patronIterator; |
||||||
|
|
||||||
|
public class Vector { |
||||||
|
public int[] datos; |
||||||
|
|
||||||
|
public Vector(int tamanyo) { |
||||||
|
this.datos = new int[tamanyo]; |
||||||
|
for(int i = 0; i<datos.length; i++) { |
||||||
|
datos[i] = i; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public int getValor(int pos) { |
||||||
|
return datos[pos]; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValor(int pos, int valor) { |
||||||
|
datos[pos] = valor; |
||||||
|
} |
||||||
|
|
||||||
|
public int dimension() { |
||||||
|
return datos.length; |
||||||
|
} |
||||||
|
|
||||||
|
public IteradorVector iterador() { |
||||||
|
return new IteradorVector(this); |
||||||
|
} |
||||||
|
|
||||||
|
public int[] getDatos() { |
||||||
|
return datos; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package patronMediator; |
||||||
|
|
||||||
|
public abstract class Colega { |
||||||
|
|
||||||
|
protected Mediador mediador; |
||||||
|
|
||||||
|
public Colega(Mediador mediador) { |
||||||
|
this.mediador = mediador; |
||||||
|
} |
||||||
|
|
||||||
|
public abstract void enviarMensaje(String mensaje); |
||||||
|
public abstract void mensajeRecibido(String mensaje); |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package patronMediator; |
||||||
|
|
||||||
|
public class ColegaConcreto1 extends Colega{ |
||||||
|
|
||||||
|
public ColegaConcreto1(Mediador mediador) { |
||||||
|
super(mediador); |
||||||
|
} |
||||||
|
|
||||||
|
public void enviarMensaje(String mensaje) { |
||||||
|
mediador.enviarMensaje(mensaje, this); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mensajeRecibido(String mensaje) { |
||||||
|
System.out.println("Colega 1 recibe el mensaje: " + mensaje); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package patronMediator; |
||||||
|
|
||||||
|
public class ColegaConcreto2 extends Colega{ |
||||||
|
|
||||||
|
public ColegaConcreto2(Mediador mediador) { |
||||||
|
super(mediador); |
||||||
|
} |
||||||
|
|
||||||
|
public void enviarMensaje(String mensaje) { |
||||||
|
mediador.enviarMensaje(mensaje, this); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mensajeRecibido(String mensaje) { |
||||||
|
System.out.println("Colega 2 recibe el mensaje: " + mensaje); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package patronMediator; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
MediadorConcreto mediador = new MediadorConcreto(); |
||||||
|
|
||||||
|
ColegaConcreto1 colega1 = new ColegaConcreto1(mediador); |
||||||
|
ColegaConcreto2 colega2 = new ColegaConcreto2(mediador); |
||||||
|
|
||||||
|
mediador.setColega1(colega1); |
||||||
|
mediador.setColega2(colega2); |
||||||
|
|
||||||
|
colega1.enviarMensaje("Hola,¿que tal?"); |
||||||
|
colega2.enviarMensaje("Bien, aprendiendo este patrón"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronMediator; |
||||||
|
|
||||||
|
public interface Mediador { |
||||||
|
public void enviarMensaje(String mensaje, Colega colega); |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package patronMediator; |
||||||
|
|
||||||
|
public class MediadorConcreto implements Mediador{ |
||||||
|
|
||||||
|
private ColegaConcreto1 colega1; |
||||||
|
private ColegaConcreto2 colega2; |
||||||
|
|
||||||
|
public void setColega1(ColegaConcreto1 colega1) { |
||||||
|
this.colega1 = colega1; |
||||||
|
} |
||||||
|
|
||||||
|
public void setColega2(ColegaConcreto2 colega2) { |
||||||
|
this.colega2 = colega2; |
||||||
|
} |
||||||
|
|
||||||
|
//este metodo recibiria el mensaje, origen y destino en el caso
|
||||||
|
//de haber mas de 2 colegas.
|
||||||
|
@Override |
||||||
|
public void enviarMensaje(String mensaje, Colega colega) { |
||||||
|
if(colega == colega1) { |
||||||
|
colega2.mensajeRecibido(mensaje); |
||||||
|
}else if(colega == colega2){ |
||||||
|
colega1.mensajeRecibido(mensaje); |
||||||
|
}else { |
||||||
|
System.out.println("El mensaje se perdio"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package patronMemento; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
//es el Cuidador, el que almacena los mementos.
|
||||||
|
public class Conserje { |
||||||
|
|
||||||
|
private ArrayList<Memento> mementos = new ArrayList<Memento>(); |
||||||
|
|
||||||
|
public void addMemento(Memento m) { |
||||||
|
mementos.add(m); |
||||||
|
} |
||||||
|
|
||||||
|
//Recuperar el memento de una posición.
|
||||||
|
public Memento getMemento(int i) { |
||||||
|
return mementos.get(i); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package patronMemento; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
//instancio la clase que almacenara los mementos.
|
||||||
|
Conserje conserje = new Conserje(); |
||||||
|
//clase que ira generando los estados.
|
||||||
|
Originador originador = new Originador(); |
||||||
|
|
||||||
|
originador.setEstado("Estado 1"); //Estamos en Estado 1
|
||||||
|
originador.setEstado("Estado 2"); //Estamos en Estado 2
|
||||||
|
conserje.addMemento(originador.crearMemento()); //Guardamos Estado 2
|
||||||
|
originador.setEstado("Estado 3"); //Estamos en Estado 3
|
||||||
|
conserje.addMemento(originador.crearMemento()); //Estamos en Estado 3
|
||||||
|
originador.setEstado("Estado 4"); //Estamos en Estado 4
|
||||||
|
originador.setMemento(conserje.getMemento(1));//Recuperamos Estado 3
|
||||||
|
|
||||||
|
System.out.println("El estado actual es: "+ originador.getEstado()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package patronMemento; |
||||||
|
|
||||||
|
public class Memento { |
||||||
|
private String estado; |
||||||
|
|
||||||
|
public Memento(String estadoParaGuardar) { |
||||||
|
estado = estadoParaGuardar; |
||||||
|
} |
||||||
|
|
||||||
|
//metodo para recuperar el estado guardado
|
||||||
|
public String getEstado() { |
||||||
|
return estado; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package patronMemento; |
||||||
|
|
||||||
|
public class Originador { |
||||||
|
private String estado; |
||||||
|
|
||||||
|
public void setEstado(String estado) { |
||||||
|
this.estado = estado; |
||||||
|
} |
||||||
|
|
||||||
|
public Memento crearMemento() { |
||||||
|
return new Memento(estado); |
||||||
|
} |
||||||
|
|
||||||
|
public void setMemento(Memento m) { |
||||||
|
this.estado = m.getEstado(); |
||||||
|
} |
||||||
|
|
||||||
|
public String getEstado() { |
||||||
|
return estado; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package patronObserver; |
||||||
|
|
||||||
|
//esta clase es el OBSERVADOR
|
||||||
|
public class Cliente implements ObservadorIF{ |
||||||
|
|
||||||
|
String nombre; |
||||||
|
|
||||||
|
public Cliente(String nombre){ |
||||||
|
this.nombre=nombre; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void update() { |
||||||
|
System.out.println(nombre + " recibe notificacion reparación"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
package patronObserver; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
//Esta clase es el OBSERVABLE
|
||||||
|
public class Electrodomestico implements ObservableIF { |
||||||
|
|
||||||
|
ArrayList<ObservadorIF> observadores; |
||||||
|
|
||||||
|
public Electrodomestico() { |
||||||
|
observadores = new ArrayList<>(); |
||||||
|
} |
||||||
|
|
||||||
|
public void electrodomesticoArreglado() { |
||||||
|
notificar(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void addObserver(ObservadorIF o) { |
||||||
|
observadores.add(o); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void removeObserver(ObservadorIF o) { |
||||||
|
observadores.remove(o); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void notificar() { |
||||||
|
for(ObservadorIF o: observadores) { |
||||||
|
o.update(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package patronObserver; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
//creo 3 objetos Observadores (Clientes), que recibiran un aviso cuando este reparado su producto.
|
||||||
|
Cliente c1 = new Cliente("Cliente 1"); |
||||||
|
Cliente c2 = new Cliente("Cliente 2"); |
||||||
|
Cliente c3 = new Cliente("Cliente 3"); |
||||||
|
|
||||||
|
//Por comprobar su correcto funcionamiento se va a crear un unico objeto Observable, que notificara a todos los Observadores.
|
||||||
|
Electrodomestico television = new Electrodomestico(); |
||||||
|
//añado los observadores de television.
|
||||||
|
television.addObserver(c1); |
||||||
|
television.addObserver(c2); |
||||||
|
television.addObserver(c3); |
||||||
|
|
||||||
|
//llamamos al metodo que disparara el aviso
|
||||||
|
television.electrodomesticoArreglado(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package patronObserver; |
||||||
|
|
||||||
|
public interface ObservableIF { |
||||||
|
|
||||||
|
public void addObserver(ObservadorIF o); |
||||||
|
public void removeObserver(ObservadorIF o); |
||||||
|
public void notificar(); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
package patronObserver; |
||||||
|
|
||||||
|
public interface ObservadorIF { |
||||||
|
|
||||||
|
public void update(); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package patronState; |
||||||
|
|
||||||
|
public class Contexto { |
||||||
|
private Estado estado; |
||||||
|
|
||||||
|
public void setEstado(Estado estado) { |
||||||
|
this.estado = estado; |
||||||
|
} |
||||||
|
|
||||||
|
public Estado getEstado() { |
||||||
|
return this.estado; |
||||||
|
} |
||||||
|
|
||||||
|
public void peticion() { |
||||||
|
estado.ejecutarOperacion(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronState; |
||||||
|
|
||||||
|
public interface Estado { |
||||||
|
void ejecutarOperacion(); |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package patronState; |
||||||
|
|
||||||
|
public class EstadoConcretoA implements Estado{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public void ejecutarOperacion() { |
||||||
|
System.out.println("En estado concreto A"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package patronState; |
||||||
|
|
||||||
|
public class EstadoConcretoB implements Estado{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public void ejecutarOperacion() { |
||||||
|
System.out.println("En estado concreto B"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package patronState; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
Estado estado = new EstadoConcretoA(); |
||||||
|
Estado estado2 = new EstadoConcretoB(); |
||||||
|
Contexto contexto = new Contexto(); |
||||||
|
|
||||||
|
//Asignamos a contexto el estado concreto A
|
||||||
|
contexto.setEstado(estado); |
||||||
|
contexto.peticion(); |
||||||
|
|
||||||
|
//asignamos a contexto el estado concreto B
|
||||||
|
contexto.setEstado(estado2); |
||||||
|
contexto.peticion(); |
||||||
|
|
||||||
|
/*Como vemos segun el estado en el que se encuentre contexto |
||||||
|
el metodo peticion(); realiza una accion diferente. */ |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package patronStrategy; |
||||||
|
|
||||||
|
public class Contexto { |
||||||
|
Estrategia estrategia; |
||||||
|
|
||||||
|
public Contexto(Estrategia s) { |
||||||
|
this.estrategia = s; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEstrategia(Estrategia s) { |
||||||
|
this.estrategia = s; |
||||||
|
} |
||||||
|
|
||||||
|
public void ejecutarMetodoEstrategico() { |
||||||
|
estrategia.comportamiento(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronStrategy; |
||||||
|
|
||||||
|
public abstract class Estrategia { |
||||||
|
public abstract void comportamiento(); |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package patronStrategy; |
||||||
|
|
||||||
|
public class EstrategiaA extends Estrategia { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void comportamiento() { |
||||||
|
System.out.println("Se realizara la estrategia A"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package patronStrategy; |
||||||
|
|
||||||
|
public class EstrategiaB extends Estrategia{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public void comportamiento() { |
||||||
|
System.out.println("Se realizara la estrategia A"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package patronStrategy; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
//instanciamos la estrategia A
|
||||||
|
Estrategia estrategiaInicial = new EstrategiaA(); |
||||||
|
//se la asignamos al contexto
|
||||||
|
Contexto contexto = new Contexto(estrategiaInicial); |
||||||
|
|
||||||
|
contexto.ejecutarMetodoEstrategico(); |
||||||
|
|
||||||
|
//instancias la estrategia B
|
||||||
|
Estrategia otraEstrategia = new EstrategiaB(); |
||||||
|
//se la asignamos al contexto
|
||||||
|
contexto.setEstrategia(otraEstrategia); |
||||||
|
|
||||||
|
contexto.ejecutarMetodoEstrategico(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package patronTemplateMethod; |
||||||
|
|
||||||
|
//clase Abstracta
|
||||||
|
public abstract class Automovil { |
||||||
|
public void desplazar() { |
||||||
|
acelerar(); |
||||||
|
cambiarMarcha(); |
||||||
|
frenar(); |
||||||
|
} |
||||||
|
private void acelerar() { |
||||||
|
System.out.println("Acelerando"); |
||||||
|
} |
||||||
|
|
||||||
|
private void frenar() { |
||||||
|
System.out.println("Frenando"); |
||||||
|
} |
||||||
|
|
||||||
|
protected abstract void cambiarMarcha(); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package patronTemplateMethod; |
||||||
|
|
||||||
|
public class AutomovilAutomatico extends Automovil{ |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void cambiarMarcha() { |
||||||
|
System.out.println("Cambio de marcha en Automatico"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package patronTemplateMethod; |
||||||
|
|
||||||
|
public class AutomovilManual extends Automovil{ |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void cambiarMarcha() { |
||||||
|
System.out.println("Cambio de marcha en Manual"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package patronTemplateMethod; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
Automovil manual = new AutomovilManual(); |
||||||
|
Automovil automatico = new AutomovilAutomatico(); |
||||||
|
|
||||||
|
manual.desplazar(); |
||||||
|
|
||||||
|
System.out.println(""); |
||||||
|
|
||||||
|
automatico.desplazar(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package patronVisitor; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
//Creamos una lista de nodos de tres elementos, una para cada nodo.
|
||||||
|
public static Nodo[] lista = { new NodoA(), new NodoB(), new NodoC() }; |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
//Creamos los visitantes concretos (las operaciones que tienen los nodos)
|
||||||
|
VisitanteSubir subir = new VisitanteSubir(); |
||||||
|
VisitanteBajar bajar = new VisitanteBajar(); |
||||||
|
|
||||||
|
/*Recorremos la lista para que acepten el visitante. Esto lo hacemos sin saber |
||||||
|
que tipo de nodo esta recibiendo, es el visitante concreto el que se encarga de averiguarlo.*/ |
||||||
|
for(int i=0; i<lista.length; i++) { |
||||||
|
lista[i].aceptar(subir); //le decimos que procese el visitante subir.
|
||||||
|
} |
||||||
|
|
||||||
|
for(int i=0; i<lista.length; i++) { |
||||||
|
lista[i].aceptar(bajar); //le decimos que procese el elemento bajar.
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronVisitor; |
||||||
|
|
||||||
|
public interface Nodo { |
||||||
|
public void aceptar(Visitante v); |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package patronVisitor; |
||||||
|
|
||||||
|
public class NodoA implements Nodo{ |
||||||
|
|
||||||
|
public void aceptar(Visitante v) { |
||||||
|
v.visitar(this); |
||||||
|
} |
||||||
|
|
||||||
|
public String operacionA() { |
||||||
|
return "Operacion A, Nodo A"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package patronVisitor; |
||||||
|
|
||||||
|
public class NodoB implements Nodo{ |
||||||
|
|
||||||
|
public void aceptar(Visitante v) { |
||||||
|
v.visitar(this); |
||||||
|
} |
||||||
|
|
||||||
|
public String operacionB() { |
||||||
|
return "Operacion B, Nodo B"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package patronVisitor; |
||||||
|
|
||||||
|
public class NodoC implements Nodo{ |
||||||
|
|
||||||
|
public void aceptar(Visitante v) { |
||||||
|
v.visitar(this); |
||||||
|
} |
||||||
|
|
||||||
|
public String operacionC() { |
||||||
|
return "Operacion C, Nodo C"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
package patronVisitor; |
||||||
|
|
||||||
|
//VisitanteNodo
|
||||||
|
public interface Visitante { |
||||||
|
public void visitar(NodoA n); |
||||||
|
public void visitar(NodoB n); |
||||||
|
public void visitar(NodoC n); |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package patronVisitor; |
||||||
|
|
||||||
|
//Visitante Concreto
|
||||||
|
public class VisitanteBajar implements Visitante{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public void visitar(NodoA n) { |
||||||
|
System.out.println("Bajar: " + n.operacionA()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void visitar(NodoB n) { |
||||||
|
System.out.println("Bajar: " + n.operacionB()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void visitar(NodoC n) { |
||||||
|
System.out.println("Bajar: " + n.operacionC()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package patronVisitor; |
||||||
|
|
||||||
|
//Visitante Concreto
|
||||||
|
public class VisitanteSubir implements Visitante { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void visitar(NodoA n) { |
||||||
|
System.out.println("Subir: " + n.operacionA()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void visitar(NodoB n) { |
||||||
|
System.out.println("Subir: " + n.operacionB()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void visitar(NodoC n) { |
||||||
|
System.out.println("Subir: " + n.operacionC()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronAbstractFactory; |
||||||
|
|
||||||
|
public interface AbstractFactory { |
||||||
|
public Boton crearBoton(); |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronAbstractFactory; |
||||||
|
|
||||||
|
public interface Boton { |
||||||
|
public void pintar(); |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
package patronAbstractFactory; |
||||||
|
|
||||||
|
public class BotonLinux implements Boton{ |
||||||
|
@Override |
||||||
|
public void pintar() { |
||||||
|
System.out.println("Soy un boton de Linux"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package patronAbstractFactory; |
||||||
|
|
||||||
|
public class BotonWindows implements Boton{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public void pintar() { |
||||||
|
System.out.println("Soy un boton de Windows"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
package patronAbstractFactory; |
||||||
|
|
||||||
|
public class Cliente { |
||||||
|
public Cliente(AbstractFactory fabrica) { |
||||||
|
Boton boton = fabrica.crearBoton(); |
||||||
|
boton.pintar(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package patronAbstractFactory; |
||||||
|
|
||||||
|
public class FabricaLinux implements AbstractFactory{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public Boton crearBoton() { |
||||||
|
return new BotonLinux(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package patronAbstractFactory; |
||||||
|
|
||||||
|
public class FabricaWindows implements AbstractFactory{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public Boton crearBoton() { |
||||||
|
return new BotonWindows(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package patronAbstractFactory; |
||||||
|
|
||||||
|
/*Permite trabajar con objetos de distintas familias (proporcionando una interfaz) de manera que las familias |
||||||
|
* no se mezclen entre sí y haciendo transparente el tipo de familia concreta que se esté usando. */ |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
//en este caso la fabrica dependeria del sistema operativo.
|
||||||
|
//mirariamos el sistema y devuelve 0 si es windows, o 1 si es linux.
|
||||||
|
|
||||||
|
int sistema = 0; |
||||||
|
Cliente c1 = new Cliente(crearFabrica(sistema)); |
||||||
|
|
||||||
|
sistema = 1; |
||||||
|
Cliente c2 = new Cliente(crearFabrica(sistema)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private static AbstractFactory crearFabrica(int sistema) { |
||||||
|
if(sistema==0) { |
||||||
|
return new FabricaWindows(); |
||||||
|
}else { |
||||||
|
return new FabricaLinux(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronBuilder; |
||||||
|
|
||||||
|
public class Cliente { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package patronBuilder; |
||||||
|
|
||||||
|
//Seria el Director en el esquema del patron.
|
||||||
|
public class Cocina { |
||||||
|
private ConstructorPizzas cP; |
||||||
|
|
||||||
|
public void setConstructorPizzas(ConstructorPizzas cP) { |
||||||
|
this.cP=cP; |
||||||
|
} |
||||||
|
|
||||||
|
public Pizza getPizza() { |
||||||
|
return cP.getPizza(); |
||||||
|
} |
||||||
|
|
||||||
|
//Este metodo llama a los constructores que van haciendo la pizza
|
||||||
|
//parte por parte
|
||||||
|
public void construirPizza() { |
||||||
|
cP.crearNuevaPizza(); |
||||||
|
cP.construirMasa(); |
||||||
|
cP.construirSalsa(); |
||||||
|
cP.construirRelleno(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package patronBuilder; |
||||||
|
|
||||||
|
public class ConstructorPizzaHawai extends ConstructorPizzas { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void construirMasa() { |
||||||
|
pizza.setMasa("suave"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void construirSalsa() { |
||||||
|
pizza.setSalsa("dulce"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void construirRelleno() { |
||||||
|
pizza.setRelleno("Piña y Jamon"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package patronBuilder; |
||||||
|
|
||||||
|
public class ConstructorPizzaPicante extends ConstructorPizzas{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public void construirMasa() { |
||||||
|
pizza.setMasa("fuerte"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void construirSalsa() { |
||||||
|
pizza.setSalsa("picante"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void construirRelleno() { |
||||||
|
pizza.setRelleno("ternera y verduras"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package patronBuilder; |
||||||
|
|
||||||
|
public abstract class ConstructorPizzas { |
||||||
|
protected Pizza pizza; |
||||||
|
|
||||||
|
public Pizza getPizza() { |
||||||
|
return pizza; |
||||||
|
} |
||||||
|
|
||||||
|
public void crearNuevaPizza() { |
||||||
|
pizza = new Pizza(); |
||||||
|
} |
||||||
|
|
||||||
|
//Los siguientes metodos los implementara cada constructor segun el tipo de pizza
|
||||||
|
public abstract void construirMasa(); |
||||||
|
public abstract void construirSalsa(); |
||||||
|
public abstract void construirRelleno(); |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package patronBuilder; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
Cocina cocina = new Cocina(); |
||||||
|
ConstructorPizzas cPH = new ConstructorPizzaHawai(); |
||||||
|
ConstructorPizzas cPP = new ConstructorPizzaPicante(); |
||||||
|
|
||||||
|
//el cliente seria al que se le pregunta que pizza quiere, y se llamaria
|
||||||
|
//a la cocina para que la prepare. por simplificar codigo se hara aqui.
|
||||||
|
|
||||||
|
cocina.setConstructorPizzas(cPH); |
||||||
|
cocina.construirPizza(); |
||||||
|
|
||||||
|
Pizza pizza = cocina.getPizza(); |
||||||
|
pizza.dimeIngredientes(); |
||||||
|
|
||||||
|
cocina.setConstructorPizzas(cPP); |
||||||
|
cocina.construirPizza(); |
||||||
|
|
||||||
|
Pizza pizza2 = cocina.getPizza(); |
||||||
|
pizza2.dimeIngredientes(); |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package patronBuilder; |
||||||
|
|
||||||
|
//Es el Producto en el esquema del patrón.
|
||||||
|
public class Pizza { |
||||||
|
private String masa; |
||||||
|
private String salsa; |
||||||
|
private String relleno; |
||||||
|
|
||||||
|
public Pizza() { |
||||||
|
masa=""; |
||||||
|
salsa=""; |
||||||
|
relleno=""; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMasa(String masa) { |
||||||
|
this.masa=masa; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSalsa(String salsa) { |
||||||
|
this.salsa=salsa; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRelleno(String relleno) { |
||||||
|
this.relleno=relleno; |
||||||
|
} |
||||||
|
|
||||||
|
public void dimeIngredientes() { |
||||||
|
System.out.println("Soy una pizza con masa "+ masa); |
||||||
|
System.out.println("Tengo de salsa "+ salsa); |
||||||
|
System.out.println("y mi relleno es "+ relleno + "\n"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package patronFactoria; |
||||||
|
|
||||||
|
public abstract class Electrodomestico { |
||||||
|
String modelo; |
||||||
|
String marca; |
||||||
|
String color; |
||||||
|
int precio; |
||||||
|
|
||||||
|
public Electrodomestico(String modelo) { |
||||||
|
this.modelo=modelo; |
||||||
|
} |
||||||
|
|
||||||
|
public void mensajePantalla(){ |
||||||
|
System.out.println("Soy un electrodomestico"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package patronFactoria; |
||||||
|
|
||||||
|
public class FactoriaElectrodomesticos implements FactoriaIF { |
||||||
|
|
||||||
|
@Override |
||||||
|
public Electrodomestico crearElectrodomestico(String nombre,String modelo) { |
||||||
|
if(nombre.equalsIgnoreCase("television")){ |
||||||
|
return new Television(modelo); |
||||||
|
}else if(nombre.equalsIgnoreCase("lavadora")) { |
||||||
|
return new Lavadora(modelo); |
||||||
|
}else if(nombre.equalsIgnoreCase("horno")) { |
||||||
|
return new Horno(modelo); |
||||||
|
}else if(nombre.equalsIgnoreCase("microondas")) { |
||||||
|
return new Microondas(modelo); |
||||||
|
} |
||||||
|
return null; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronFactoria; |
||||||
|
|
||||||
|
public interface FactoriaIF { |
||||||
|
public Electrodomestico crearElectrodomestico(String nombre,String modelo); |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package patronFactoria; |
||||||
|
|
||||||
|
public class Horno extends Electrodomestico{ |
||||||
|
|
||||||
|
public Horno(String modelo){ |
||||||
|
super(modelo); |
||||||
|
} |
||||||
|
|
||||||
|
public void mensajePantalla(){ |
||||||
|
System.out.println("Soy un horno"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package patronFactoria; |
||||||
|
|
||||||
|
public class Lavadora extends Electrodomestico{ |
||||||
|
|
||||||
|
|
||||||
|
public Lavadora(String modelo){ |
||||||
|
super(modelo); |
||||||
|
} |
||||||
|
|
||||||
|
public void mensajePantalla(){ |
||||||
|
System.out.println("Soy una lavadora"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package patronFactoria; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
System.out.println("Demostración Patron factoría. "); |
||||||
|
System.out.println("Puedes crear una Television/Lavadora/Horno/Microondas.\n"); |
||||||
|
FactoriaElectrodomesticos fabrica = new FactoriaElectrodomesticos(); |
||||||
|
|
||||||
|
System.out.println("Usuario introduce que quiere una Television ........"); |
||||||
|
Electrodomestico e1 = fabrica.crearElectrodomestico("television", "tele123"); |
||||||
|
|
||||||
|
System.out.println("Usuario introduce que quiere una Lavadora .........."); |
||||||
|
Electrodomestico e2 = fabrica.crearElectrodomestico("lavadora", "lavadora123"); |
||||||
|
|
||||||
|
System.out.println("Usuario introduce que quiere un Horno .............."); |
||||||
|
Electrodomestico e3 = fabrica.crearElectrodomestico("horno", "Horno123"); |
||||||
|
|
||||||
|
System.out.println("Usuario introduce que quiere un Microondas ........."); |
||||||
|
Electrodomestico e4 = fabrica.crearElectrodomestico("microondas", "microondas123"); |
||||||
|
|
||||||
|
System.out.println("\nSe muestra por pantalla que es cada uno de los objetos creados"); |
||||||
|
e1.mensajePantalla(); |
||||||
|
e2.mensajePantalla(); |
||||||
|
e3.mensajePantalla(); |
||||||
|
e4.mensajePantalla(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package patronFactoria; |
||||||
|
|
||||||
|
public class Microondas extends Electrodomestico{ |
||||||
|
|
||||||
|
|
||||||
|
public Microondas(String modelo){ |
||||||
|
super(modelo); |
||||||
|
} |
||||||
|
|
||||||
|
public void mensajePantalla(){ |
||||||
|
System.out.println("Soy un microondas"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package patronFactoria; |
||||||
|
|
||||||
|
public class Television extends Electrodomestico{ |
||||||
|
|
||||||
|
public Television(String modelo){ |
||||||
|
super(modelo); |
||||||
|
} |
||||||
|
|
||||||
|
public void mensajePantalla(){ |
||||||
|
System.out.println("Soy una television"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package patronPrototype; |
||||||
|
|
||||||
|
public class Circulo extends Figura{ |
||||||
|
|
||||||
|
public Circulo(String nombre) { |
||||||
|
super(nombre); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package patronPrototype; |
||||||
|
|
||||||
|
public class Cuadrado extends Figura{ |
||||||
|
|
||||||
|
public Cuadrado(String nombre) { |
||||||
|
super(nombre); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package patronPrototype; |
||||||
|
|
||||||
|
public class Figura implements Prototype{ |
||||||
|
private String nombre; |
||||||
|
|
||||||
|
public Figura(String nombre) { |
||||||
|
this.nombre=nombre; |
||||||
|
} |
||||||
|
|
||||||
|
public String getNombre() { |
||||||
|
return nombre; |
||||||
|
} |
||||||
|
|
||||||
|
public void setNombre(String nombre) { |
||||||
|
this.nombre = nombre; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Figura clone() { |
||||||
|
return new Figura(this.nombre); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package patronPrototype; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
Figura circulo; |
||||||
|
Figura circulo2; |
||||||
|
|
||||||
|
Figura cuadrado; |
||||||
|
Figura cuadrado2; |
||||||
|
|
||||||
|
//creo circulo, y creo circulo2 que sera un clone de circulo
|
||||||
|
circulo = new Circulo("Circulo1"); |
||||||
|
circulo2 = circulo.clone(); |
||||||
|
|
||||||
|
//creo cuadrado, y creo cuadrado2 que sera un clone de cuadrado
|
||||||
|
cuadrado = new Cuadrado("Cuadrado1"); |
||||||
|
cuadrado2 = cuadrado.clone(); |
||||||
|
|
||||||
|
//llegado aqui ya puedo modificar el nombre de las figuras 2 sin alterar el de las figuras originales.
|
||||||
|
circulo2.setNombre("Circulo2"); |
||||||
|
cuadrado2.setNombre("Cuadrado2"); |
||||||
|
|
||||||
|
System.out.println("La figura se llama: "+ circulo.getNombre()); |
||||||
|
System.out.println("La figura se llama: "+ circulo2.getNombre()); |
||||||
|
System.out.println("La figura se llama: "+ cuadrado.getNombre()); |
||||||
|
System.out.println("La figura se llama: "+ cuadrado2.getNombre()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronPrototype; |
||||||
|
|
||||||
|
public interface Prototype{ |
||||||
|
public Object clone(); |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package patronSingleton; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String [] args) { |
||||||
|
|
||||||
|
Singleton s = Singleton.getSingleton(); //Permitido
|
||||||
|
|
||||||
|
Singleton s2 = Singleton.getSingleton(); //No permitido
|
||||||
|
|
||||||
|
//otra opcion es la inicializacion bajo demanda, en la que el
|
||||||
|
//singleton se instancia solo, y el mismo controla que no pueda
|
||||||
|
//haber mas.
|
||||||
|
|
||||||
|
|
||||||
|
Singleton1 sin1 = Singleton1.getInstancia(); |
||||||
|
sin1.mostrarMensaje(); |
||||||
|
// Singleton1 sin2 = new Singleton1();
|
||||||
|
//Esta linea da error por no estar visible el constructor.
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package patronSingleton; |
||||||
|
|
||||||
|
public class Singleton { |
||||||
|
|
||||||
|
private static Singleton instancia = null; |
||||||
|
|
||||||
|
private Singleton() {} |
||||||
|
|
||||||
|
public static Singleton getSingleton() { |
||||||
|
if (instancia==null) { |
||||||
|
System.out.println("Se genero una instancia de Singleton"); |
||||||
|
instancia = new Singleton(); |
||||||
|
}else { |
||||||
|
System.out.println("No se puede generar otra instancia de Singleton"); |
||||||
|
} |
||||||
|
return instancia; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package patronSingleton; |
||||||
|
|
||||||
|
public class Singleton1 { |
||||||
|
private static Singleton1 instancia = new Singleton1(); |
||||||
|
|
||||||
|
//Constructor privado no permite que se genere un constructor por defecto.
|
||||||
|
private Singleton1() {} |
||||||
|
|
||||||
|
public static Singleton1 getInstancia() { |
||||||
|
return instancia; |
||||||
|
} |
||||||
|
|
||||||
|
public void mostrarMensaje() { |
||||||
|
System.out.println("\nSoy la instancia de Singleton1"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
package patronAdapter; |
||||||
|
|
||||||
|
public abstract class Guitarra { |
||||||
|
abstract public void encenderGuitarra(); |
||||||
|
abstract public void apagarGuitarra(); |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package patronAdapter; |
||||||
|
|
||||||
|
//Esta es la clase adaptada o Adaptable
|
||||||
|
public class GuitarraAcustica { |
||||||
|
|
||||||
|
public void tocarGuitarra() { |
||||||
|
System.out.println("Se esta tocando la guitarra"); |
||||||
|
} |
||||||
|
|
||||||
|
public void dejarGuitarra() { |
||||||
|
System.out.println("Se ha dejado de tocar la guitarra"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package patronAdapter; |
||||||
|
|
||||||
|
public class GuitarraElectrica extends Guitarra{ |
||||||
|
|
||||||
|
public GuitarraElectrica() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void encenderGuitarra() { |
||||||
|
System.out.println("Se ha encendido la guitarra"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void apagarGuitarra() { |
||||||
|
System.out.println("Se ha apagado la guitarra"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package patronAdapter; |
||||||
|
|
||||||
|
//Esta es la clase Adaptador.
|
||||||
|
|
||||||
|
public class GuitarraElectricaAcustica extends Guitarra{ |
||||||
|
|
||||||
|
GuitarraAcustica acustica = new GuitarraAcustica(); |
||||||
|
|
||||||
|
@Override |
||||||
|
public void encenderGuitarra() { |
||||||
|
acustica.tocarGuitarra(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void apagarGuitarra() { |
||||||
|
acustica.dejarGuitarra(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package patronAdapter; |
||||||
|
|
||||||
|
public class Main { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
//creamos una Guitarra Electrica sin necesidad de nada Especial
|
||||||
|
Guitarra guitarraE = new GuitarraElectrica(); |
||||||
|
guitarraE.encenderGuitarra(); |
||||||
|
guitarraE.apagarGuitarra(); |
||||||
|
|
||||||
|
//Si queremos una Guitarra Acustica no podemos
|
||||||
|
//Tenemos que crear una clase adaptador
|
||||||
|
Guitarra guitarraEA = new GuitarraElectricaAcustica(); |
||||||
|
//esta clase sera la encargada de llamar a los metodos de la clase adaptable (GuitaraAcustica)
|
||||||
|
guitarraEA.encenderGuitarra(); //llama a tocarGuitarra();
|
||||||
|
guitarraEA.apagarGuitarra(); //llama a dejarGuitarra();
|
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
package patronBridge; |
||||||
|
|
||||||
|
public interface Abstraccion { |
||||||
|
public void Operacion(); |
||||||
|
//Como puede ser encender/apagar el interruptor
|
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package patronBridge; |
||||||
|
|
||||||
|
public class AbstraccionRefinada implements Abstraccion{ |
||||||
|
private Implementador implementacion; |
||||||
|
|
||||||
|
public AbstraccionRefinada(Implementador implementacion) { |
||||||
|
this.implementacion=implementacion; |
||||||
|
} |
||||||
|
|
||||||
|
public void Operacion() { |
||||||
|
implementacion.OperacionImplementada(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package patronBridge; |
||||||
|
|
||||||
|
public interface Implementador { |
||||||
|
public abstract void OperacionImplementada(); |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package patronBridge; |
||||||
|
|
||||||
|
public class ImplementadorConcretoA implements Implementador{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public void OperacionImplementada() { |
||||||
|
System.out.println("Operacion Implementador A"); |
||||||
|
} |
||||||
|
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue