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