Fabio Ramon wrote:

> Frederico,
>
> Eu concordo com o Einar. Mesmo no livro do Gamma, ele somente usa este artificio 
>quando se trata de obter instancias de objetos que implementam uma
> interface (classe abstrata). Nesse caso me parece mais natural voce usar isso, uma 
>vez que nao existe o construtor (e voce nem sabe qual o objeto que
> esta insanciando). Quando uma classe e' concreta e suas instancias s�o conhecidas me 
>parece mais natural usar o construtor da propria classe (embora
> eu nao veja obrigatoriedade). De qualquer forma, a solucao que eu propus utiliza a 
>sua solucao dentro do construtor e, a menos de nao ser thread-safe,
> eu acho que atende. Alias, se quisermos uma solucao thread-safe eu acho que devemos 
>usar algo mais parecido com a sua solucao.
>

Eu concordo com voces. A solu��o de utilizar o construtor diretamente � realmente mais 
natural!
A quest�o � que a outra solu��o n�o deixa de ser bonita pelo fato do cliente n�o poder 
usar

    MessageOutputStream var = new MessageOutputStream();     .

Se fosse assim os Creational Patterns do Gamma n�o seriam tamb�m bonitos - pensando no 
lado
da utiliza��o pelo cliente, embora como o F�bio citou as aplica��es do Gamma sejam 
diferentes.

Indo mais fundo ainda,  construtores do tipo static factory n�o s�o t�o incomuns 
assim, quanto parece.
As APIs para constru��o de aplica��es de gerencia de rede do TMForum ( antigo NMF ) s�o
baseadas em constru��es deste tipo. E n�o �  factory virtual como h� no livro do Gamma.

Abra�os,

Fred.

>
> []'s
>
> Fabio Ramon
>
> PS: A solucao que eu propus:
>
> import java.io.*;
>
> class MessageOutputStream extends ObjectOutputStream {
>   private static ByteArrayOutputStream temp;
>   private static Object lock = new Object();
>
>   // Your _bos
>   private ByteArrayOutputStream _bos;
>
>   static OutputStream getTemp() {
>     synchronized (lock) {
>        return temp = new ByteArrayOutputStream();
>     }
>   }
>
>   public MessageOutputStream() throws IOException  {
>      super(getTemp());
>      _bos = temp;
>   }
>
> }
>
> "Frederico Charle S. Faria" wrote:
>
> > Einar Saukas wrote:
> >
> > > "Frederico Charle S. Faria" wrote:
> > > >
> > > > Einar Saukas wrote:
> > > > >
> > > > >         Essa discuss�o est� bem legal, mas de qualquer forma o problema
> > > > > original continua em aberto: como fazer para instanciar uma classe,
> > > > > repass�-la para o construtor da classe base e depois ainda guard�-la
> > > > > numa vari�vel de inst�ncia?
> > > > >
> > > > >         Ou, colocando o problema de outra forma, existe alguma maneira
> > > > > de implementar algo assim:
> > > > >
> > > > > class MessageOutputStream extends ObjectOutputStream {
> > > > >   private ByteArrayOutputStream _bos;
> > > > >   MessageOutputStream() throws java.io.IOException {
> > > > >     super(_bos = new ByteArrayOutputStream());  // ERRO!
> > > > >   }
> > > > > }
> > > > >
> > > > >         ... de forma que o cliente possa usar essa classe fazendo
> > > > > apenas isto:
> > > > >
> > > > > MessageOutputStream var = new MessageOutputStream();
> > > > >
> > > > >         Algu�m tem mais sugest�es?
> > > >
> > > > Talvez isto resolva seu problema:
> > > >
> > > > class MessageOutputStream extends ObjectOutputStream {
> > > >   private ByteArrayOutputStream _bos;
> > > >   static MessageOutputStream constroi() throws java.io.IOException {
> > > >        ByteArrayOutputStream tmp = new ByteArrayOutputStream();
> > > >        MessageOutputStream   mos = new  MessageOutputStream(tmp);
> > > >        return mos;
> > > >    };
> > > >   MessageOutputStream(ByteArrayOutputStream _bosvar) throws 
>java.io.IOException  {
> > > >      super(_bosvar);
> > > >     _bos = _bosvar;
> > > >   };
> > > > }
> > >
> > >         Opa, essa � uma boa solu��o!
> > >
> > >         Ela s� n�o chega a ser perfeita porque a forma de instancia��o da
> > > classe n�o fica muito natural. Quer dizer, ao inv�s da forma padr�o:
> > >
> > > MessageOutputStream var = new MessageOutputStream();
> > >
> > >         ... o cliente tem que fazer algo assim:
> > >
> > > MessageOutputStream var = MessageOutputStream.constroi();
> > >
> > >         Pode n�o ser muito "bonito", mas j� funciona melhor do que as
> > > que eu tinha pensado. Pelo menos ela esconde a utiliza��o interna do
> > > ByteArrayOutputStream, que era o objetivo principal.
> >
> > N�o concordo muito com essa opini�o pois alguns dos Design Patterns do Gamma s�o 
>baseados em implementa��es deste tipo. Mas  o importante foi como
> > voce mesmo disse resolver o principal
> > objetivo!
> >
> > >
> > >
> > >         Legal, � essa solu��o mesmo que eu vou adotar, a n�o ser que
> > > algu�m consiga bolar alguma m�gica para fazer a instancia��o da forma
> > > convencional...
> > >
> > >         Ent�o obrigado pela id�ia!
> > >
> > >         Um abra�o,
> > >
> > > Einar Saukas
> > > Technical Consultant
> > > Summa Technologies, Inc.
> > > http://www.summa-tech.com
> > >
> > >     --------------------------- LISTA SOUJAVA ---------------------------
> > >     http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP
> > >     [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
> > >     ---------------------------------------------------------------------
> >
> > --
> > Frederico Charles S. Faria
> > Especialista em Sistemas
> > INATEL - PRODEP
> > Fone/Phone: +55 35 471-9280
> >
> >     --------------------------- LISTA SOUJAVA ---------------------------
> >     http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP
> >     [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
> >     ---------------------------------------------------------------------
>
>     --------------------------- LISTA SOUJAVA ---------------------------
>     http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP
>     [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
>     ---------------------------------------------------------------------

--
Frederico Charles S. Faria
Especialista em Sistemas
INATEL - PRODEP
Fone/Phone: +55 35 471-9280


    --------------------------- LISTA SOUJAVA ---------------------------
    http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP
    [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
    ---------------------------------------------------------------------

Responder a