odraudek99'

Blog de Eduardo Granados

Abstract Factory

Este es el primer patrón de diseño que escribo :D

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;
}
}
}


About these ads

2 Responses to Abstract Factory

  1. 3zcurdia March 5, 2012 at 4:41 pm

    lo bueno que era facil, jajaja y ahora ¿como piensas almacenar ese modelo de datos?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: