| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 11:17:59
|
xjunior
JavaEvangelist
![[Avatar]](/images/avatar/7d5e16c1a728cb7d3e40ffa4eadb67ab.png)
Membro desde: 26/08/2009 15:49:19
Mensagens: 321
Localização: Belo Horizonte - MG
Offline
|
O objetivo na lata do proxy é transformar algo complexo em simples e lembra do proxy em servidor, para que ele serve???
Este design pattern nao possui filosofia diferente, e sim um proxy na empresa (lembrando do servidor...) guarda cache das páginas acessadas, não é? Implementa segurança, e faz com que o acesso seja "mais rápido"...
O design pattern proxy é para fazer o acesso ser mais rápido em algo custoso.... Ter um intermediário entre o complexo e a sua implementação, ok?
|
acessem um dos melhores foruns de TI: http://www.clubedaprogramacao.com/forum/
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 11:25:44
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Offline
|
acidburn wrote:Tenho uma classe que busca no banco uma imagem muito grande, então crio um proxy desta classe assim posso Instanciar o objeto real pela proxy somente quando necessário asim não alocando a memória antecipadamente seria isso?
É exatamente isso. Um proxy pode controlar acesso por diversos motivos: 1. Lazy loading (exemplo que você deu); 2. Controle ou restrições de acesso; 3. Sincronização 4. Caching (exemplo dado pelo xjunior); O proxy não adiciona nenhuma funcionalidade aparente a quem usa a classe. É diferente do decorator, que agrega uma função. Diferenciar um do outro as vezes é bastante difícil. As collections do Java fornecem dois tipos de proxy. Um deles para tornar a collection read-only e outro para fornecer acesso sincronizado. Não confundir esse proxy com o proxy dinâmico do Java, a classe Proxy.
This message was edited 1 time. Last update was at 08/04/2010 11:26:59
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 11:27:06
|
acidburn
HelloWorld
Membro desde: 08/04/2010 09:12:09
Mensagens: 11
Offline
|
xjunior wrote:Bom amigo, lembre-se que o observer é um padrão comportamental e não estrutural, visite este link que irá dar uma visão semântica sobre os design patterns e como utilizá-los, não tem implementação, mas é excelente fonte para vc saber o que é e como implementar.
http://www.pg.cefetpr.br/coinf/simone/patterns/
não consigo acessar o proxy esta com erro no link que você sugeriu
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 11:34:26
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Offline
|
Ah, outro detalhe. Não confudir:
1. O design pattern com a classe Proxy;
2. O design pattern com um servidor de Proxy;
O proxy também se comporta como a classe que você quer acessar. O usuário pode nem saber que está lidando com um proxy. Note no exemplo acima, que nos 3 casos você acaba com um List<String> na mão. No caso da sua classe de imagem, o proxy e a imagem deveriam implementar uma interface comum, Image.
A classe ficaria assim:
Note que alguns poderiam argumentar que aquele proxy é, na verdade, um decorator, já que ele acrescenta a funcionalidade de lazy-loading. Isso é restrição de acesso ou funcionalidade extra? Depende do ponto de vista... em todo caso a implementação seria idêntica e, na minha opinião, discutir isso é discutir o sexo dos anjos.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 11:36:59
|
acidburn
HelloWorld
Membro desde: 08/04/2010 09:12:09
Mensagens: 11
Offline
|
Por qual motivo a terceira pessoa não sera chamada, vejo que o modelo que esta sendo utilizado esta diferente é por isso?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 11:44:58
|
pedro.lamarao
What is classpath?
Membro desde: 08/04/2010 10:23:52
Mensagens: 7
Offline
|
acidburn wrote:
pedro.lamarao wrote:Um bom exemplo de aplicação de Proxy para funcionalidade, ao invés de economia, ocorre em frameworks de "remoting".
Como uma referência direta à memória de outro processo é impossível, o programa local faz referência a um objeto Proxy ao invés; e o Proxy oculta a solução para o problema de comunicação entre processos.
Qualquer objeto que está para um sistema externo -- como um conector de banco de dados -- pode ser considerado um Proxy do sistema externo no programa local.
Note que "proxy" é inglês para "procurador" -- uma pessoa legalmente habilitada a agir em nome de outra.
O que não consigo compreender é como você disse o Proxy é um procurador, porém nos exemplos que eu li, entendi que o proxy esta agindo como um intermediário em um determinado momento assim chamando uma classe para executar algo, como no exemplo a cima onde a classe proxy se não me engano é utilizada para realizar a consulta no banco me corrijam se estiver errado, mas qual a necessidade disso ?
Talvez a questão não seja sobre necessidade, mas sobre utilidade.
É claro que um idéia de um Proxy puro parece inútil -- se ele é idêntico ao objeto original, porque não acessar o objeto original logo de uma vez?
O Proxy parece mais útil quando ele oculta alguma regra adicional que seja útil.
No seu exemplo, essa regra adicional parece ser um cache de dados recuperados do banco -- de modo que os acessos subsequentes são mais econômicos.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 11:47:11
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Offline
|
acidburn wrote:Por qual motivo a terceira pessoa não sera chamada, vejo que o modelo que esta sendo utilizado esta diferente é por isso?
No proxy que você implementou, é pq o método getId() não aciona a busca. Como o id é passado no construtor e o proxy o armazena internamente, não tem pq fazer busca se você só quiser saber o id. Se fizer pessoa.get(2).getNome() aí sim, a busca será acionada.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 11:49:18
|
acidburn
HelloWorld
Membro desde: 08/04/2010 09:12:09
Mensagens: 11
Offline
|
ViniGodoy wrote:
acidburn wrote:Por qual motivo a terceira pessoa não sera chamada, vejo que o modelo que esta sendo utilizado esta diferente é por isso?
No proxy que você implementou, é pq o método getId() não aciona a busca. Como o id é passado no construtor e o proxy o armazena internamente, não tem pq fazer busca se você só quiser saber o id. Se fizer pessoa.get(2).getNome() aí sim, a busca será acionada.
a então é isso mesmo
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 11:52:42
|
acidburn
HelloWorld
Membro desde: 08/04/2010 09:12:09
Mensagens: 11
Offline
|
Por que na busca da segunda pessoa ele alega estar no cache, é por que o objeto proxy vai estar carregado com dados?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 12:49:58
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Offline
|
acidburn wrote:Por que na busca da segunda pessoa ele alega estar no cache, é por que o objeto proxy vai estar carregado com dados?
Sim. E num segundo getNome() ele não buscará nada no banco.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2010 13:58:50
|
xjunior
JavaEvangelist
![[Avatar]](/images/avatar/7d5e16c1a728cb7d3e40ffa4eadb67ab.png)
Membro desde: 26/08/2009 15:49:19
Mensagens: 321
Localização: Belo Horizonte - MG
Offline
|
Isto mesmo, acidbun, então ele não buscará pois fará o cache desta busca...
|
acessem um dos melhores foruns de TI: http://www.clubedaprogramacao.com/forum/
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live. |
|
|
 |
|
|