Olá,
Estou tentando entender esses dois conceitos, mas complicado.
Por exemplo, é possível aplicar um ou os dois padrões nesse caso:
(SuperClasse)
PRODUTO
(SubClasses)
ROUPAS CALÇADOS ACESSÓRIOS
Se possível, como?
Olá,
Estou tentando entender esses dois conceitos, mas complicado.
Por exemplo, é possível aplicar um ou os dois padrões nesse caso:
(SuperClasse)
PRODUTO
(SubClasses)
ROUPAS CALÇADOS ACESSÓRIOS
Se possível, como?
Oi,
Posso responder com outra pergunta?
=> Calçados, roupas e etc são especialidades de Produtos ou a diferença não seria um atributo como por exemplo tipo?
São especialidades.
Cada um possui atributos diferentes.
Entaum, eu to com ele aberto na tela e o livro dos padrões de projetos na mesa. Mas ainda naum ta mto claro pra mim.
Oi,
Mas essa wiki tem até o fonte em java no exemplo…o que tá pegando? Acho que você deve ter dúvida em polimofismo, não?? Dê uma lida sobre polimofismo, variáveis polimorficas…
Na minha visão oq faz sentido seria algo assim:
Minha classe Produto concreta, com um método de criação para cada especialização, e as classes de especializações sendo abstratas.
Mas isso q faz sentido pra mim naum se encaixa no diagrama do wiki, nem do livro (ateh pq são os msms)
[quote=carrijo]Na minha visão oq faz sentido seria algo assim:
Minha classe Produto concreta, com um método de criação para cada especialização, e as classes de especializações sendo abstratas.
Mas isso q faz sentido pra mim naum se encaixa no diagrama do wiki, nem do livro (ateh pq são os msms)[/quote]
Você não pode ter uma SuperClasse concreta e suas especializações abstratas…isso tá errado…você faz o seguinte:
Quando você quiser criar um novo calçado, roupa ou qualquer outra especialidade de produto chame esse método Create(Class c). Note que passamos a classe para usa-la em nossa fábrica afim de devolver um objeto apropriado com a solicitação, isso as vezes é feito de outras formas indiretas…mas o exemplo é só para entender.
Olha essa outra wiki aqui sobre Abstract Factory. Acho que esse padrão é mais fácil de entender primeiro, depois vá para o outro. O mais importante depois de saber implementar é saber quando usar.
Ae! Agora ta começando a ficar mais claro!
Mas ainda to com algumas dúvidas, tipo, a ProdutoFactory é concreta?
Em q momento eu vou implementar o corpo do método Create()?
[quote=carrijo]Ae! Agora ta começando a ficar mais claro!
Mas ainda to com algumas dúvidas, tipo, a ProdutoFactory é concreta?
Em q momento eu vou implementar o corpo do método Create()?[/quote]
Não vejo problema algum ela ser concreta, até por que só terá essa finalidade de fábrica.
ps. Não estamos aqui tratando os padrões com muito purismo, acho interessante começar a entender e depois ir refatorando até ficar lindo!!!
Blz entaum! Vlw
Ateh minhas próximas dúvidas! E pode ter certeza q vaum ser mtas =P
Eu acabei de implementar algo q eu espero q seja um AbstractFactory
Mas achei meio estranho. Alguma opinião?
//Interfaces
public abstract class Produto{
}
public class Fundo extends Produto{
}
public class RendaFixa extends Produto{
}
//Factory
public abstract class ProdutoFactory{
public static ProdutoFactory getFactory(Produto produto){
if produto == Fundo return new Fundo();
else return new RendaFixa();
}
public abstract Produto create();
}
}
public abstract class FundoFactory extends ProdutoFactory{
public Fundo create(){
return new Fundo;
}
}
public abstract class RendaFixaFactory extends ProdutoFactory{
public RendaFixa create(){
return new RendaFixa;
}
}
[quote=carrijo]Eu acabei de implementar algo q eu espero q seja um AbstractFactory
Mas achei meio estranho. Alguma opinião?
[/quote]
Oi,
Realmente muito estranho, primeiro por que vc tem uma fábrica que fabrica fábricas?? O padrão tem esse nome por que o seu comportamente é esse, FABRICAR ALGUMA COISA APARTIR DE ALGO, que no exemplo que dei foi um argumento com a CLASSE que você quer instanciar…Por que não pega o exemplo da wiki e faz exatamente igual? Joga num projeto em sua IDE preferida e roda para verificar o comportamento no passo a passo.
Entaum, eu segui esse exemplo aki:
E ah, eu eskeci um detalhe no código!
[quote=carrijo]Entaum, eu segui esse exemplo aki:
E ah, eu eskeci um detalhe no código![/quote]
Oi,
Você tá criando uma fábrica de Produtos e como argumento de entrada para sua fábrica você tá passando um Produto, se você já tem um Produto para quê precisa da fábrica, entendeu??
reveja isso.
Ah eh verdade! Foi uma bobeira minha.
No exemplo q eu fiz eu tava usando uma string, tipo “FD” para fundo e “RF” para o renda fixa.
Naum entendi mto bem akele eskema de passar uma classe como parâmetro.