Está en la página 1de 12

Patrones de diseño creacionales

Nombre Alumno

Cesar Andrés Lopez Sotelo

Nombre Asignatura

Programación Orientada a Objetos II

Instituto IACC

28 de Junio de 2021
Desarrollo

Lea atentamente el siguiente caso:

Supongamos que usted ha sido seleccionado para crear un manual de usuario sobre los

Patrones de diseño de un sistema implementado en la empresa Software Collection, dicho

Sistema está desarrollado en Java y trata de la automatización del proceso de compra y

Venta de productos agrícolas.

De acuerdo al caso anterior y los contenidos revisados en la semana, elabore un informe

dónde:

1. Señale la aplicabilidad del patrón creacional factory method .

Las siguientes son las clases e interfaces creadas para el sistema de comercialización de los

Productos agrícolas, estos permiten la realización del patrón de diseño del método de fábrica, y

sus funciones se muestran en el orden especificado en la materia.

La superclase abstracta de objetos producidos Factory Method, esta define la interfaz de los

Objetos que crea el patrón Factory Method.

public abstract class Mercaderia {


private String nombreProducto;
private String tipoProducto;private float precioProducto;
public String getNombreProducto() {
return nombreProducto;
}
public void setNombreProducto(String nombreProducto) {
this.nombreProducto = nombreProducto;
}
public String getTipoProducto() {
return tipoProducto;
}
public void setTipoProducto(String tipoProducto) {
this.tipoProducto = tipoProducto;
}
public float getPrecioProducto() {
return precioProducto;
}
public void setPrecioProducto(float precioProducto) {
this.precioProducto = precioProducto;
}
abstract public float calcularImpuesto();
}
Esta es una clase concreta que es instanciada por los objetos que participan en el patrón
Factory Method
public class Productocerdo extends Mercaderia {
private long codigoProducto;

public Productocerdo() {
super();
}

public Productocerdo(String nombreProducto, String tipoProducto, float precio, long


codigoProducto) {
this.setNombreProducto(nombreProducto);
this.setTipoProducto(tipoProducto);
this.setPrecioProducto(precio);
this.codigoProducto = codigoProducto;
}

public long getCodigoProducto() {


return codigoProducto;
}

public void setCodigoProducto(long codigoProducto) {


this.codigoProducto = codigoProducto;
}

public void mostrarProducto() {


System.out.println ("Producto Vacuno ==> Nombre: " + getNombreProducto()+ ",
Tipo: " +
getTipoProducto() + ", Codigo: " + getCodigoProducto() + ", " + "Precio: " +
getPrecioProducto());
}
}

Esta clase es una clase separada necesaria para crear una clase específica. Se hace

Indirectamente a través de la instancia de la clase.public class PedirMercaderia {

public static void main(String[] args) {

FactoryMercaderia producto = new FactoryMercaderia();

producto.crearProductoCarne();
}

Es una interfaz. Un objeto que crea un objeto de tipo Productocarne basado en la solicitud

del objeto de la clase de orden de producto, la cual se debe implementar en esta interfaz.

public interface IFFactoryMercaderia {


public Productocerdo crearProductocerdo();
public Productocerdo actualizarProductocerdo(Productocerdo productocerdo);
public Productocerdo consultarProductocerdo(long codigoProducto);
}
Esta es la clase que implementa adecuadamente la interface IFFactoryMercaderia y tiene un

método para crear objetos

Productocerdo
public class FactoryMercaderia implements IFFactoryMercaderia {
@Override
public Productocerdo crearProductocerdo() {
return new Productocerdo();
}
@Override
public Productocerdo actualizarProductoVacuno(Productocerdo productocerdo) {
// codigo para buscar el producto cerdo en la base de datos
// codigo para actualizar el producto cerdo retornado en la busqueda
return productocerdo;
}
@Override
public Productocerdo consultarProductocerdo(long codigoProducto) {
// codigo para buscar el producto cerdo dentro de base de datos
return productocerdo;
}
}

2. Mencione las características que tiene el sistema de aplicabilidad de patrón de diseño

abstract factory .

Características de las clases e interfaces creadas para el sistema de comercialización de

productos agrícolas, estas características y la aplicabilidad del patrón de diseño abstracto de la

fábrica, y sus funciones se muestran en el orden Especificado En la materia de la semana.

Cliente (PedirMercaderia): Esta clase llamará a la factoría FactoryMercaderia ya que necesita


crear uno o más objetos que provee la factoría, es decir, cliente lo que quiere es obtener una

instancia de alguno de los productos cerdo y vacuno.

public class PedirMercaderia {

public static void main(String[] args) {

FactoryMercaderia producto1 = new FactoryMercaderia();

producto1.crearProductoCerdo();

FactoryMercaderia producto2 = new FactoryMercaderia();


producto2.crearProductovacuno();
}
}
Abstract Factory (IFFactoryMercaderia): Es la definición de la interfaz de la factoría. Provee
un método para la obtención de cada objeto que pueda crear (Productocerdo, Productovacuno)
public interface IFFactoryMercaderia {
public Productocerdo crearProductocerdo();
public Productocerdo actualizarProductocerdo(ProductoCerdo productocerdo);
public Productocerdo consultarProductocerdo(long codigoProducto);
public Productovacuno crearProductovacuno();
public Productovacuno actualizarProductovacuno(Productovacuno productovacuno);
public Productovacuno consultarProductovacuno(long codigoProducto);
}
Factorías Concretas: Estas son las diferentes familias de productos, clases Productocerdo y
Productovacuno)
public class Productocerdo extends Mercaderia {
private long codigoProducto;
public Productocerdo() {
super();
}
public Productocerdo(String nombreProducto, String tipoProducto, float precio, long
codigoProducto) {
this.setNombreProducto(nombreProducto);
this.setTipoProducto(tipoProducto);
this.setPrecioProducto(precio);
this.codigoProducto = codigoProducto;
}
public long getCodigoProducto() {
return codigoProducto;
}
public void setCodigoProducto(long codigoProducto) {
this.codigoProducto = codigoProducto;
}
public void mostrarProducto() {
System.out.println ("Producto Cerdo ==> Nombre: " + getNombreProducto()+ ",
Tipo: " +
getTipoProducto() + ", Codigo: " + getCodigoProducto() + ", " + "Precio: " +
getPrecioProducto());
}
}

public class Productovacuno extends Mercaderia {


private long codigoProducto;
private String dieta;
public Productovacuno() {
super();
}public Productovacuno(String nombreProducto, String tipoProducto, float precio, long
codigoProducto, String dieta) {
this.setNombreProducto(nombreProducto);
this.setTipoProducto(tipoProducto);
this.setPrecioProducto(precio);
this.codigoProducto = codigoProducto;
this.dieta = dieta;
}
public long getCodigoProducto() {
return codigoProducto;
}
public void setCodigoProducto(long codigoProducto) {
this.codigoProducto = codigoProducto;
}
public String getDieta() {
return dieta;
}
public void setDieta(String dieta) {
this.dieta = dieta;
}
public void mostrarProducto() {
System.out.println ("Producto Equino ==> Nombre: " + getNombreProducto()+ ",
Tipo: " +
getTipoProducto() + ", Codigo: " + getCodigoProducto() + ", " + "Precio: " +
getPrecioProducto() +
", Dieta: " + getDieta());
}

Como es calculo de precio debemos agregar el cálculo del impuesto.

public float calcularImpuesto() {


return getPrecioProducto() * 0.18f;
}
Producto Abstracto: No aplica para este caso porque no se crearán productos genéricos, sino

Productos concretos y específicos (Productocerdo y Productovacuno), tal como se mostró en el

apartado anterior.

Producto Concreto: Implementación de los diferentes productos, por ejemplo,

Productocerdo y Productovacuno.
public class FactoryMercaderia implements IFFactoryMercaderia {
@Override
public Productocerdo crearProductocerdo() {
return new Productocerdo();
}
@Override
public Productocerdo actualizarProductoVacuno(Productocerdo productocerdo) {
// codigo para buscar el producto cerdo en la base de datos
// codigo para actualizar el producto cerdo retornado en la busqueda
return productocerdo;
}
@Override
public Productocerdo consultarProductocerdo(long codigoProducto) {
// codigo para buscar el producto vacuno en la base de datos
return productocerdo;
}
@Override
public ProductoEquino crearProductovacuno() {
return new Productovacuno();
}
@Override
public ProductoEquino actualizarProductoEquino(ProductoEquino productovacuno) {
// codigo para buscar el producto vacuno en la base de datos
// codigo para actualizar el producto vacuno retornado en la busqueda
return productovacuno;
}
@Override
public Productovacuno consultarProductovacuno(long codigoProducto) {
// codigo para buscar el producto vacuno en la base de datos
return productovacuno;}
}

3. Explique la utilidad del patrón de diseño creacional singleton .

Al aplicar este patrón, nos aseguramos de que se cree una instancia de la clase principal de la

Aplicación y de que todos los usuarios dispongan de un punto de acceso global al sistema. Este
caso de estudio tiene arquitectura cliente-servidor, donde el servidor ejecuta la

aplicación. Y el cliente solo maneja el sistema a nivel de resultados.

class Singleton
{

private static Singleton instancia_unica = null;

public String singleton;

private Singleton()
{
singleton = " crear una sola instancia de este tipo de clase";
}

public static Singleton getInstance()


{
if (instancia_unica == null)
instancia_unica = new Singleton();

return instancia_unica;
}
}

4. Describa los diferentes usos de un patrón de diseño builder .

Para utilizar este sistema se requieren varios atributos y comportamientos (métodos u

operaciones) para describirlo, la aplicación de este modelo se puede establecer en este sistema.

Del mismo modo, cuando el algoritmo de creación (lógica de programación / conjunto de

instrucciones) de un objeto complejo puede ser independiente de sus componentes. Este es un

ejemplo de tales productos agrícolas:

import java.util.Date;
public class ProductoGenerico {
private String nombreProducto;
private String tipoProducto;
private float precioProducto;
private long codigoProducto;
private String clasificacion;
private String paisOrigen;
private Date fechaVencimiento;
public ProductoGenerico(String nombreProducto, String tipoProducto, float
precioProducto, long codigoProducto,
String clasificacion, String paisOrigen, Date fechaVencimiento) {
super();
this.nombreProducto = nombreProducto;
this.tipoProducto = tipoProducto;
this.precioProducto = precioProducto;
this.codigoProducto = codigoProducto;
this.clasificacion = clasificacion;
this.paisOrigen = paisOrigen;
this.fechaVencimiento = fechaVencimiento;
}
public String getNombreProducto() {
return nombreProducto;
}
public void setNombreProducto(String nombreProducto) {
this.nombreProducto = nombreProducto;
}
public String getTipoProducto() {
return tipoProducto;
}
public void setTipoProducto(String tipoProducto) {this.tipoProducto = tipoProducto;
}
public float getPrecioProducto() {
return precioProducto;
}
public void setPrecioProducto(float precioProducto) {
this.precioProducto = precioProducto;
}
public long getCodigoProducto() {
return codigoProducto;
}
public void setCodigoProducto(long codigoProducto) {
this.codigoProducto = codigoProducto;
}
public String getClasificacion() {
return clasificacion;
}
public void setClasificacion(String clasificacion) {
this.clasificacion = clasificacion;
}
public String getPaisOrigen() {
return paisOrigen;
}
public void setPaisOrigen(String paisOrigen) {
this.paisOrigen = paisOrigen;
}
public Date getFechaVencimiento() {
return fechaVencimiento;
}
public void setFechaVencimiento(Date fechaVencimiento) {
this.fechaVencimiento = fechaVencimiento;
}
//Estos puntos indican la creacion de muchos más atributos junto con sus metods getters y
setters
protected ProductoGenerico crearProductoGenerico() {
//codigo de creacion de objeto generico
}
protected ProductoGenerico actualizarProductoGenerico(ProductoGenerico
productoGenerico) {
//codigo de creacion de objeto generico
}//Estos puntos indican la creación muchos otros métodos u operaciones
}

5. Determine las aplicaciones relacionadas con el patrón creacional propotype .

. Si el sistema de comercio de productos agrícolas requiere que la instancia de clase (objeto

ProductoVacuno, objeto ProductoEquino) tenga los mismos datos duplicados en términos de sus

atributos en algún momento, se debe utilizar este modo.

ejemplo :

para clonar un objeto, pero debe tenerse en cuenta que no se trata de una implementación de un

patrón de diseño.

public class PedirMercaderia {


public static void main(String[] args) throws CloneNotSupportedException {
FactoryMercaderia producto1 = new FactoryMercaderia();
producto1.crearProductocerdo();
FactoryMercaderia producto2 = new FactoryMercaderia();
producto2.crearProductovacuno();
PedirMercaderia pedirMercaderia = new PedirMercaderia();
pedirMercaderia.clone();
}
}
6. Explique las características del patrón de diseño object pool .

En su respuesta incluya las aplicaciones de este patrón de diseño .

El diseño esta basado en una arquitectura cliente –servidor,esto nos ayuda a tener multiples

accesos al sistema en tiempo real(al mismo tiempo), esta arquitectura requiere implementar

una base de datos de administración de conexiones, ya que se piensa en abrir demasiadas

conexiones se implementa lo siguiente:

Rendimiento: crear una conexión es una operación costosa, por lo que debe reutilizarse y la

cantidad de conexiones activas o existentes es limitada.A continuación, se muestra una clase

Java que permite la creación de una conexión a la

base de datos MySQL. Cabe señalar que el patrón de diseño no está completamente

implementado, pero muestra las partes importantes, como la creación de la conexión:

import java.sql.*;
public class ConexionBD {
private static Connection cnx = null;
public static Connection crearConexion() throws SQLException, ClassNotFoundException
{
if (cnx == null) {
try {
Class.forName("com.mysql.jdbc.Driver");
cnx = DriverManager.getConnection("jdbc:mysql://localhost/java_mysql", "root", "");
} catch (SQLException ex) {
throw new SQLException(ex);
} catch (ClassNotFoundException ex) {
throw new ClassCastException(ex.getMessage());
}
}
return cnx;
}
public static void cerrar() throws SQLException {
if (cnx != null) {
cnx.close();
}}
}
7. Mencione donde se pueden utilizar los patrones de diseño creacional .

De acuerdo a lo implementado podemos definir que los sistemas de automatización

desarrollados bajo programación orientada a objetos pueden aplicar patrones de creación,

porque estos patrones permiten la creación de clases para fabricar (crear objetos o instancias)

objetos. En este caso de estudio se utiliza un patrón de diseño innovador, para este caso se

utilizaron los siguientes patrones: Método Factory y AbstractFactory La información detallada

Bibliografía

PARA REFERENCIAR ESTE DOCUMENTO, CONSIDERE: IACC (2020). Patrones de diseño

creacionales. Programación Orientada a Objetos II. Semana 3.

www.lawebdelprogramador.com

También podría gustarte