Definição
O Factory Pattern fornece uma maneira de usar um exemplo, como uma fábrica de objetos. A fábrica pode retornar uma instância de uma das várias classes possíveis (em hierarquia subclasse), em função dos dados fornecidos a ele.
Quando usar
• Quando uma classe não pode antecipar que tipo de classe de objeto que ele deve criar.
• Quando você quer saber qual classe é criada.
• Quando você tem classes que são derivadas das subclasses mesmo, ou eles
podem ser de fato classes independentes que apenas partilham a mesma interface. De qualquer forma, os métodos nessas instâncias de classe são as mesmas e podem ser usados alternadamente.
• Quando você quer isolar o cliente a partir do tipo real que está sendo
instanciado.
Benefícios
• O cliente não precisa conhecer todas as subclasses de objetos que deve criar. Só é preciso uma referência para a classe abstrata / interface e da fábrica de objeto.
• A fábrica irá encapsular a criação de objetos. Isto pode ser útil se o processo de criação é muito complexa.
Desvantagens/consequências
• Não existe forma de alterar uma classe sem implementar uma recompilação.
Exemplo
Este exemplo mostra como dois diferentes produtos são criados usando o ProductFactory. ProductA usa o método da superclasse writeName.
ProductB implementa writeName que inverte o nome.
public abstract class Product {
public void writeName(String name) {
System.out.println("My name is " + name);
}
}
public class ProductA extends Product { }
public class ProductB extends Product {
public void writeName(String name) {
StringBuilder tempName = new StringBuilder().append(name);
System.out.println("My reversed name is" +
tempName.reverse());
}
}
public class ProductFactory {
Product createProduct(String type) {
if(type.equals("B"))
return new ProductB();
else
return new ProductA();
}
}
public class TestClientFactory {
public static void main(String[] args) {
ProductFactory pf = new ProductFactory();
Product prod;
prod = pf.createProduct("A");
prod.writeName("John Doe");
prod = pf.createProduct("B");
prod.writeName("John Doe");
}
}
Quando TestClientFactory é executado o resultado será:
Meu nome é John Doe
Meu nome é revertida eod Nhoj
Meu nome é John Doe
Meu nome é revertida eod Nhoj
Exemplo de uso
O objeto da conexão no pacote sql do java é uma fábrica. Dependendo do driver de banco de dados que você usa, se inicia a implementação da interface Statement. No exemplo a seguir, realmente obter um objeto OracleStatement do pacote oracle.jdbc.driver Ao chamar createStatement.
import java.sql.*;
public class TestClientFactoryUsage {
static Connection con;
static Statement stmt;
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("myServer", "user",
"password");
stmt = con.createStatement();
} catch(Exception e) {}
}
}
Nenhum comentário:
Postar um comentário