Metodos Factory?

O builder contém um factory method, mas não implementa o padrão Factory Method. Já concordamos que o método responsável pela criação é um factory method, mas isso não basta para ter o padrão Factory Method implementado ( como o renrutal e eu estamos tentando demonstrar ).
Quer um exemplo de um padrão que implementa de verdade o padrão Factory Method? Abstract Factory. Só que nesse caso, não só a família de objetos é abstraída; as próprias fábricas também o são.

[quote=sergiotaborda]Bom, a referencia bibliográfica…

Design Patterns Java Workbook
Steven John Metsker
2002 Pearson Education, Inc

Claro agora ? :wink: [/quote]
Ué, mas esse livro é o mesmo que o renrutal comentou. E, de acordo com os critérios estabelecidos pelo próprio autor, um método que instancia objetos mas não retorna uma abstração não pode ser reconhecido como implementação do padrão Factory Method.

Mas o trecho mais interessante do capítulo é o seguinte:

[quote]You might think any method that creates and returns a new object is a “factory” method. In object-oriented programming, however, methods that return new objects are common, and not every such method is an instance of the FACTORY METHOD pattern.

(…)

The fact that a method creates a new object does not in itself mean that it is an example of the FACTORY METHOD pattern. The FACTORY METHOD pattern requires that an operation that creates an object also isolates its client from knowing which class to instantiate. In FACTORY METHOD, you will find several classes that implement the same operation, returning the same, abstract type but internally instantiating different classes that implement the type.[/quote]
Que é exatamente o que venho dizendo.

[quote=tnaires][quote=sergiotaborda]Bom, a referencia bibliográfica…

Design Patterns Java Workbook
Steven John Metsker
2002 Pearson Education, Inc

Claro agora ? :wink: [/quote]
Ué, mas esse livro é o mesmo que o renrutal comentou.
E, de acordo com os critérios estabelecidos pelo próprio autor, um método que instancia objetos mas não retorna uma abstração não pode ser reconhecido como implementação do padrão Factory Method.
[/quote]

Vc queria um livro que falasse de Factory Method de forma que não fosse igual a Factory. Ora ai está.
Porque o autor defende que só é Factory Method se tem abstração do retorno eu escrevi três paragrafos dando a minha opinião sobre esse ponto.

Eu já entendi que vc passou a defender essa opção depois que entendeu que Factory Method e Factory não são a mesma coisa. Eu tentei mostrar que o vinculo “Factory Method -> retorno abstrato” é resultado da aplicação de boas práticas e outros principios além do padrão em si. O exemplo que acho mais simples é o retorno de de Object. Ninguem respondeu se esse retorno é abstrato o suficiente. Exemplos do uso de Objeto como retorno de um Factory Method ? O método clone() de Object.

Eu estava tentando discutir a abstração ou , se quiser, as razões que levam a só aceitar que existe um padrão se o retorno for “abstrato”. Para mim não faz sentido esse reducionismo e apresentei as razões. Contudo, como este é um topico no forum de Certificação , para passar na certificação vc tem que aceitar que o padrão Factroy Method existe, é diferente de Factory e só é aceitável considerar um método como especialização do padrão se ele tiver um retorno abstrato. O Steve vai mais longe , dizendo que além disso ele precisa ser polimorfico ( como em Collection.iterator() onde além de retorno uma interface ainda é sujetio a sobre-escrita).

Se quiser dar um passo além do que a certificação pede, estamos aí… (já agora, que ceritificação pediria isso ?)

[quote=sergiotaborda]Vc queria um livro que falasse de Factory Method de forma que não fosse igual a Factory. Ora ai está.
Porque o autor defende que só é Factory Method se tem abstração do retorno eu escrevi três paragrafos dando a minha opinião sobre esse ponto.[/quote]
Não, eu pedi uma referência que mostrasse que implementar o padrão Factory Method se resumiria a criar um método que simplesmente instanciasse uma classe:

Não. Desde meu primeiro post neste tópico eu venho enfatizando a abstração do tipo retornado pelo factory method. Comecei minha participação aqui justamente questionando o argumento inicial defendido por você e por outros.

Entendi seu ponto e entendi também onde você discorda. E você tem todo o direito de fazer isso. Acho que chegamos ao final de nossa discussão.

[EDITADO]
Só queria acrescentar que a discussão foi bastante proveitosa para mim, e continuo sendo admirador dos artigos que você escreve e leitor assíduo do seu blog.
[/EDITADO]