Define una interfase para crear un objeto, pero deja a las clases que la implementan, la decision de que clase instanciar. Difiere la operacion de instancia de clases a las subclases de un Metodo de Fabricacion.
Un ambiente que desea administar aplicaciones de oficina, necesita manejar de manera uniforme dichas aplicaciones. Las aplicaciones pueden ser un procesador de texto, hojas de calculo, un planificador de tareas, un creador de presentaciones, un navegador de Internet, etc. Dependiendo del tipo de documento reciba el administrador, debe instanciar la clase que manipule dicho documento
Proveer un objeto de aplicacion que sea independiente de los objetos especificos a los que les delegara la implantacion de los servicios. El diagrama UML muestra la organizacion de las clases Product. Una clase abstracta, la cual es producidad por el Factory. ConcreteProduct. Extiende a la clase Product, dando las capacidades de almacenar y manipular informacion. CreationRequestor. Cliente de una instancia de tipo FactoryIF. Maneja el producto por medio de su clase abstracta (Product) FactoryIF. Interfase que define el nombre de los metodos de creacion. Recibe un parametro, que le permite deducir como construir el producto. Factory. Clase que cumple con el contrato de FactoryIF, y que internamente crea una instancia de ConcreteProduct.
La clase cliente es independiente de la clase producto y el disenno por interfase es fortalecido.
Se desea incluir un programa que ayude a capturar informacion de una lista de opciones. Graficamente se puede implantar como una lista o un combo. La interfase OpcionCaptura proporciona metodo, para indicar las opciones a desplegar,via el metodo opciones, que recibe un arreglo de cadenas de caracteres.
public interface OpcionCaptura { .... }See the complete code for OpcionCaptura here.
public void opciones(String[] lista);
Todos los elementos de captura extienden a esta interfase. El primer elemento de captura es un lista grafica, o en Swing, JList. Esta clase extiende a un elemento javax.swing.JList e implementa a la interfase OpcionCaptura
public class ListaCaptura extends JList implements OpcionCaptura { .... }See the complete code for ListaCaptura here.
import javax.swing.JList;
El codigo que permite mostrar graficamente los elementos son:
public void opciones(String [] lista) { this.setListData(lista); }
Para representar las opciones como un ComboBox, se crea una clase que extiende a la clase javax.swing.JComboBox
public class ComboCaptura extends JComboBox implements OpcionCaptura { .... }See the complete code for ComboCaptura here.
import javax.swing.JComboBox;
public void opciones(String [] lista) { for (int i=0;i < lista.length;i++){ this.addItem(lista[i]); } }
La interfase que define como fabricar estos elementos de captura es:
public interface OpcionCapturaFactoryIF { .... }See the complete code for OpcionCapturaFactoryIF here.
public final static int LISTA = 10; public final static int COMBO = 20; public OpcionCaptura creaCaptura(int tipo);
La clase que implanta el contrato de OpcionCapturaFactoryIF es:
public class OpcionCapturaFactory implements OpcionCapturaFactoryIF { .... }See the complete code for OpcionCapturaFactory here.
public OpcionCaptura creaCaptura(int tipo) { if (tipo==OpcionCapturaFactoryIF.LISTA) { return new ListaCaptura(); } else if ( tipo ==OpcionCapturaFactoryIF.COMBO) { return new ComboCaptura(); } else { return null; } }
La clase cliente es:
public class OpcionesCliente { .... }See the complete code for OpcionesCliente here.
import javax.swing.JFrame; import java.awt.Container; import java.awt.Component;
public void inicia(OpcionCapturaFactoryIF fabr,int tipo) { String [] opciones = {"anakin","luke","yoda"}; JFrame frame = new JFrame("OpcionCaptura"); Container contentPane = frame.getContentPane(); OpcionCaptura gui= fabr.creaCaptura(tipo); gui.opciones(opciones); contentPane.add((Component)gui); frame.pack(); frame.show(); }
En la clase principal, el cliente se crea y se indica la fabrica que se va a utilizar y el tipo de componente a crear
public class OpcionesMain { .... }See the complete code for OpcionesMain here.
public static void main(String [] args) { OpcionesCliente cliente = new OpcionesCliente(); cliente.inicia(new OpcionCapturaFactory(),OpcionCapturaFactoryIF.LISTA); }