Bridge (padrón de deseño): Diferenzas entre revisións

Contido eliminado Contido engadido
Liña 81:
==Exemplo==
 
 
 
<source lang="java">
/*
* Memoria que permite el intercabio de los datos almacenados en la misma
*
*/
 
class MemoriaIntercambio extends Memoria{
public MemoriaIntercambio(ImplementacionMemoria memoria){
super(memoria);
}
 
// Intercambia el dato almacenado en la posicion i, con el almacenado en la posicion j
public void intercambiar(Integer i, Integer j){
String aux = super.obtener(i);
super.guardar(i, super.obtener(j));
super.guardar(j, aux);
 
}
}
 
</source>
 
<source lang="java">
/*
* Memoria que unicamente permite el obtener y guardar datos.
*
*/
 
class Memoria {
public Memoria(ImplementacionMemoria memoria){
_imp = memoria;
}
 
//Obtiene el dato de la posicion i
public String obtener(Integer i) {
return _imp.obtener(i);
}
 
// Guarda el dato en la posicion i
public void guardar(Integer i, String dato){
_imp.guardar(i, dato);
}
 
// atributo privado con la implementacion especifica de la memoria
private ImplementacionMemoria _imp;
}
 
 
</source>
 
<source lang="java">
/**
* Clase Main del ejemplo del patron Puente (Bridge)
*
*/
public class main {
 
/**
* @param args
*/
static public void main(String argv[]) {
ImplementacionMemoria mhash = new ImplementacionHash();
ImplementacionMemoria mvector = new ImplementacionVector();
Memoria m = new Memoria(mhash);
MemoriaIntercambio mi = new MemoriaIntercambio(mvector);
m.guardar(0, "0xfa21");
m.guardar(1, "0x8732");
m.guardar(2, "0x329f");
mi.guardar(0, "0xfa21");
mi.guardar(1, "0x8732");
mi.intercambiar(0, 1);
System.out.println(m.obtener(1));
System.out.println(mi.obtener(0));
}
 
}
 
</source>
 
<source lang="java">
/*
* Implementacion de Memoria usando Vector.
*
*/
 
import java.util.Vector;
 
class ImplementacionVector implements ImplementacionMemoria {
 
public ImplementacionVector() {
_mem = new Vector<String>();
}
//Obtiene el dato de la posicion i
public String obtener(Integer i) {
return _mem.get(i.intValue());
}
 
// Guarda el dato en la posicion i
public void guardar(Integer i, String dato) {
if (_mem.size() <= i){
while (_mem.size() <= i){
_mem.add("nil");
}
}
_mem.set(i.intValue(), dato);
}
 
 
private Vector<String> _mem;
}
 
</source>
 
<source lang="java">
/*
* Interface que debe de ser implementada, por las implementaciones especificas de la memoria
*
*/
 
interface ImplementacionMemoria {
 
//Obtiene el dato de la posicion i
public String obtener(Integer i);
 
// Guarda el dato en la posicion i
public void guardar(Integer i, String dato);
 
}
 
</source>
 
<source lang="java">
/*
* Implementacion de Memoria usando HashMap.
*
*/
 
import java.util.HashMap;
 
class ImplementacionHash implements ImplementacionMemoria {
 
public ImplementacionHash() {
_mem = new HashMap<Integer, String>();
}
//Obtiene el dato de la posicion i
public String obtener(Integer i) {
return _mem.get(i);
}
 
// Guarda el dato en la posicion i
public void guardar(Integer i, String dato) {
_mem.put(i, dato);
}
 
 
private HashMap<Integer, String> _mem;
}
 
</source>