Está en la página 1de 9

Programación Orientada a Objetos II

1. Señale la aplicabilidad del patrón creacional factory method (2 puntos).


• Productos: define la interfaz de los objetos que puede crear la fábrica

• ConcretaProductos - ConcreteProductN: clases que implementan productos. Si

comparten lógica productos podría pasar a ser una clase abstracta

• Factory: declara el método fábrica que devuelve un objeto de tipo Producto. Puede

que lo utilice desde algunas de sus propias operaciones, en tal caso será una clase

abstracta

• ConcreteFactory: redefine el método fábrica para devolver un objeto de tipo

ConcreteProductos.

public abstract class Productos


{
private String nombre;
private String marca;
private Sting clase

public String getNombre()


{
return nombre;
}

public void setNombre(String nombre)


{
this.nombre = nombre;
}

public String getMarca ()


{
return marca;
}

public void setMarca(String marca)


{
this.marca = marca;
}
public String getClase ()
{
return clase;
}

public void setClase(String clase)


{
This.clase =clase;
}
}
2. Mencione las características que tiene el sistema de aplicabilidad de patrón de diseño

• Cliente: utiliza solamente las interfaces declaradas en la factoría y en los productos

abstractos.

• Factoría Abstracto: declara una interfaz para la creación de objetos de productos

abstractos.

• Factoría Concreta: implementa las operaciones para la creación de objetos de

productos concretos.

• Producto Abstracto: declara una interfaz para los objetos de un tipo de productos.

• Producto Concreta: define un objeto de producto que la correspondiente factoría

concreta se encargaría de crear, a la vez que implementa la interfaz de producto

abstracto.

Implementación Cliente.
public class FactoryProductos
{
public void main(String[] args)
{
FactoryClase grupo1 = new FactoryClase();
Grupo1. ProductosLacteos();

FactoryClase grupo2 = new FactoryClase ();


grupo.ProductosPerecible();
}
}

Implementación Factoría Abstracta

public interface FactoryProducto2


{
public clase NuevoClaseLacteos();
public clase NuevosClasePerecible();
}
Implementación Producto concreto

public class FactoryProductos implements FactoryProductos2


{

public ClaseLacteo NuevoClaseLacteos ()


{
return new ClaseLacteo ();
}

public ClasePerecible NuevoClasePerecible ()


{
return new ClasePerecible ();
}
}
3. Explique la utilidad del patrón de diseño creacional singleton (1 punto).

Mediante este patrón podemos hacer que únicamente haya una sola instancia de una
clase en nuestra aplicación de forma similar a una variable global, pero de una forma más
elegante.

public class Database {

private static Database DB;


private static Conexion con ;
private static Estado est;

public static Database getInstance(){


if(DB==null){
DB= new Database();
}
return DB;
}
public Conexion getConexion(){
if(con==null){
try {
String Host = "jdbc:sistema://localhost/sistema";
String user = "luis";
String password = "123456";
con = DriverManager.getConexion( Host, user, password );
} catch (SQLException ex) {
Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
}
}

return con;
}
Conexion con = Database.getInstance().getConexion();

4. Describa los diferentes usos de un patrón de diseño builder (1 punto).


El patrón Builder puede convertirse en una solución muy válida para aquellas clases que
tienen un número importante de parámetros.
Cabe mencionar que este patrón implica la creación de un objeto extra, con lo cual incrementa
también el gasto de memoria;

public class usuario {

private String nombre;


private String apellido;
private String direccion;
private String correo;

public usuario() {
}

public String getNombre() {


return nombrer; }

public void setNobre(String nombre) {


this.nombre = nombre; }

public String getApellido() {


return apellido; }

public void setApellido(String apellido) {


this.apellido = apellido; }

Public String getDireccion() {


return direccion; }

public void setDireccion(String direccion) {


this.direccion = direccion; }

public String getCorreo() {


return correo; }

public void setCorreo(String Correo) {


this.correo = correo; }

public interface IBuilder {


usuario build();
}
5. Determine las aplicaciones relacionadas con el patrón creacional propotype (1 punto).
Este patrón debe ser utilizado cuando un sistema posea objetos con datos repetitivos, en cuanto
a sus atributos. Hay que pensar en este patrón como si fuese una fábrica que tiene ciertas plantillas de
ejemplos de sus productos y, a partir de estos prototipos, puede crear una gran cantidad de productos
con esas características.

public abstract class Productos implements Clonable


{
private String nombre;
private String categoria;
private String marca;
private doble precio;

public Productos(String nombre, String categoría, String marca, double precio) {


setNombre(nombre);
setCategoria (categoria);
setMarca (marca);
setPrecio (precio);
}
public Productos clone () throws CloneNotSupportedException
{
return super.clone(); }
}
public abstract String DetalleProducto();
public String getnombre()
{
return nombre; }
public void setnombre(String nombre)
{
this.nombre = nombre; }
public String getCategoria()
{
return categoria; }
public void setCategoria(String categoria)
{
this.categoria = categoria; }
public String getMarca()
{
return marca }
public void setMarca(String marca)
{
this.marca = marca; }
}

public class MostrarProducto extends Productos


{
public String itemProductos()
{
return this.getnombre ()+this.getcategoria()+this.getmarca;
}
}

6. Explique las características del patrón de diseño object pool (0,8 puntos).
En su respuesta incluya las aplicaciones de este patrón de diseño (0,2 puntos).

Cuando el cliente necesita un objeto, lo pide al pool, de modo que si existe se lo devuelve y si no
se crea uno nuevo. Con este patrón ahorramos memoria, ya que no creamos objetos innecesarios.
Tampoco se destruyen innecesariamente, ya que al utilizarlos los devolvemos al pool. Este patrón se
puede implementar cuando nuestra aplicación trabaja con bases de datos, lo que se realiza básicamente
es obtener una conexión, realizar consultas u operaciones SQL y por último cerrar la conexión.

public class ConBD


{
public static void main (String args[]) throws SQLException
{
try
{
//Crea la instancia con el pool.

PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();

pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setURL("jdbc:oracle:thin:@//localhost:1521/XE");
pds.setUser("<user>");
pds.setPassword("<password>");

//Obtener la conexión con la base de datos.


Connection conn = pds.getConnection();

//se ejecutan las operaciones con las bases de datos


Statement stmt = conn.createStatement ();
stmt.execute("select * from usuarios");
//Se cierra la conexion.
conn.close();
conn=null;

System.out.println("Connection returned to the " +


"UniversalConnectionPool\n");

}
catch(SQLException e)
{
System.out.println("ConBD - " +
"main()-SQLException occurred : "
+ e.getMessage());
}
}
}

7. Mencione donde se pueden utilizar los patrones de diseño creacional (1 punto).

Los patrones creacionales sirven para solucionar problemas derivados de la creación de nuevos
objetos
Este patrón lo utilizados para instanciar objetos, y así separar la implementación del cliente y de
los objetos que se utilizan. Con ellos intentamos separar la lógica de creación de objetos y encapsularla.

También podría gustarte