Este es el primer patrón de diseño que escribo
Tipo de patron:
Creacional.
Propósito:
Provee una interfaz para la creación de una familia de objetos sin especificar una clase concreta.
Implementación:
El patrón Abtract Factory se utiliza cuando:
El cliente debe ser independiete de como los objetos son creados.
La aplicación debe ser configurada con una o multiples familias de objetos.
Se necesite proveer una colección de clases revelando únicamente los contratos sin mostrar su implementación.
Ejemplo.
La dirección de una persona esta compuesta básicamente por calle, número exterior e interior, país, ciudad, el orden de colocar los datos puede ser distinto en cada aplicación, sin embargo, al tener un AddressFactory podemos dejar el orden a cargo de los clientes y exponiendo los datos de forma básica.

AddressFactory.java
public interface AddressFactory {
public Address createAddress();
public PhoneNumber createPhoneNumber();
}
Address.java
public abstract class Address {
private String street;
private String city;
private String region;
private String postCode;
public static final String EOL_STRING =
System.getProperty("line.separator");
public static final String SPACE = " ";
public abstract String getCountry();
public String getFullAddress() {
return street + EOL_STRING + city + SPACE + postCode + EOL_STRING;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
public String getPostCode() {
return postCode;
}
public void setPostCode(String postCode) {
this.postCode = postCode;
}
}
PhoneNumber.java
public interface PhoneNumber {public abstract String getCountryCode();
public String getPhoneNumber();
public void setPhoneNumber(String phoneNumber);
}
MXAddressFactory.java
import odraudek99.designpatterns.abstractfactory.Address;
import odraudek99.designpatterns.abstractfactory.AddressFactory;
import odraudek99.designpatterns.abstractfactory.PhoneNumber;
public class MXAddressFactory implements AddressFactory {
public Address createAddress() {
return new MXAddress();
}
public PhoneNumber createPhoneNumber() {
return new MXPhoneNumber();
}
}
MXAddress.java
:import odraudek99.designpatterns.abstractfactory.Address;
public class MXAddress extends Address {
private static final String COUNTRY = "MEXICO";
private static final String COMMA = ",";
public String getCountry() {
return COUNTRY;
}
public String getFullAddress() {
return getStreet() + EOL_STRING + getCity() +
COMMA + SPACE + getRegion() + SPACE +
getPostCode() + EOL_STRING + COUNTRY +
EOL_STRING;
}
}
MXPhoneNumber.java
:import odraudek99.designpatterns.abstractfactory.PhoneNumber;
public class MXPhoneNumber implements PhoneNumber {
private static final String COUNTRY_CODE = "52";
private static final int NUMBER_LENGTH = 10;
private String phoneNumber;
public String getCountryCode() {
return COUNTRY_CODE;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
if (phoneNumber.length() == NUMBER_LENGTH) {
this.phoneNumber = phoneNumber;
}
}
}
Like this:
Like Loading...
lo bueno que era facil, jajaja y ahora ¿como piensas almacenar ese modelo de datos?
Este es un nivel arriba de los datos, a la BD solo le importarán las clases: PhoneNumber y Address