Padrão de Projeto Bridge  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
Alexandre Gazola
JavaTeenager
[Avatar]

Membro desde: 23/07/2004 14:48:23
Mensagens: 176
Localização: Rio de Janeiro
Offline

O propósito do padrão Bridge é desacoplar uma abstração de sua implementação, de modo que as duas possam variar independentemente.
Os participantes do padrão são:
- Abstraction
- RefinedAbstraction
- Implementor
- ConcreteImplementor

Eu entendo perfeitamente que podemos "projetar" abstração e implementação independentemente, porque o padrão evita que eles estejam fortemente acoplados.
No entanto, estou tendo dificuldades para entender como a abstração pode variar. Considerando que as diversas RefinedAbstraction são extensões de Abstraction, ou seja, sua interface possui métodos diferentes da interface comum, em que sentido as abstrações podem variar????
Por exemplo, considere o código abaixo:

public static void main(String[] args) {
Abstraction r = new RefinedAbstraction(new ConcreteImplementor);
// mas agora, e se eu quisesse usar os métodos específicos de //RefinedAbstraction?
// Eu teria que trabalhar com o tipo concreto (ou fazer casts)
RefinedAbstraction r = new RefinedAbstraction(new ConcreteImplementor);
r.specificMethod();
}

Mas se eu trabalhar diretamente com o tipo concreto, então eu não poderia variar as abstrações. Estou chegando a conclusão de que não é esse o nível de variação que o padrão propõe, e sim, que eu possa ter diversas abstrações independente de implementações, mas na ora de usar eu codifico considerando UMA abstração particular. Seria isso?????

Obrigado

Alexandre Gazola

Blog: http://alexandregazola.wordpress.com

"Que proveito tem o homem ganhar o mundo inteiro e perder a sua alma?" (Mc. 8:36)

"Buscai, em primeiro lugar, o Reino de Deus e a sua justiça, e todas essas coisas vos serão dadas por acréscimo" (Mt. 6:33)
brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

Tomei a liberdade de da um printScreen no diagram de classe do bridge que tem no livro ADDISON-WESLEY--Design-Patterns--Elements-of-Reusable.(O diagrama é bem auto explicativo)

E vou dar uma comentada para você derrepente lhe ajude a resolver suas dúvidas.

Nesse diagrama vc tem:
- Window que é a abstração mais alta da janela e que vai receber uma abstração da interface de implementação de janelas. È da Window que vc vai herdar para fazer uma janela de sobre pro exemplo;
- WindowImp que é a abstração de implementação das janelas. É de Window Imp que vc vai herdar para fazer com que todas suas janelas funcione no PalmOS;
[Thumb - bridge.JPG]
 Nome do arquivo bridge.JPG [Disk] Download
 Descrição
 Tamanho 32 Kbytes
 Baixado:  477 vez(es)

Alexandre Gazola
JavaTeenager
[Avatar]

Membro desde: 23/07/2004 14:48:23
Mensagens: 176
Localização: Rio de Janeiro
Offline

Sim, no caso entao, como eu coloquei, o objetivo é vc ter a hierarquia de abstrações diferente desacoplada da hierarquia de implementações. Mas, uma vez que eu escolha determinada abstração, eu não posso alterá-la.
Eu devo fazer assim IconWindow window = new IconWindow() ; e nao assim: Window window = new IconWindow(); caso eu queria trabalhar com janelas IconWindow(), certo? Eu estava pensando que poderia variar a abstração em tempo de execução, mas nao é esse o propósito, ok? O propósito é só desvincular abstração de implementação, sem a flexibilidade de tornar as abstrações intercambiáveis (a não ser que estas possuam a mesma interface, o que na maioria das vezes nao é o caso).

Entendi bem?

Alexandre Gazola

Blog: http://alexandregazola.wordpress.com

"Que proveito tem o homem ganhar o mundo inteiro e perder a sua alma?" (Mc. 8:36)

"Buscai, em primeiro lugar, o Reino de Deus e a sua justiça, e todas essas coisas vos serão dadas por acréscimo" (Mt. 6:33)
brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

Bridge serve para vc desacoplar a implementação da abstração!

Alexandre Gazola wrote:Sim, no caso entao, como eu coloquei, o objetivo é vc ter a hierarquia de abstrações diferente desacoplada da hierarquia de implementações. Mas, uma vez que eu escolha determinada abstração, eu não posso alterá-la.

Bridge serve para vc desacoplar a implementação da abstração!
Vc pode ir para cima na arvore ex: Eu posso usar uma IconWindow como Window

Window win = new IconWindow();

Alexandre Gazola wrote:
Eu devo fazer assim IconWindow window = new IconWindow() ; e nao assim: Window window = new IconWindow(); caso eu queria trabalhar com janelas IconWindow(), certo?


Certo para vc trabalhar com IconWindow vc deve declarar e criar uma IconWindow

Alexandre Gazola wrote:
Eu estava pensando que poderia variar a abstração em tempo de execução, mas nao é esse o propósito, ok?


Vc pode variar a abstração sim como dito acima:
Vc pode ir para cima na arvore ex: Eu posso usar uma IconWindow como Window

Alexandre Gazola wrote:
O propósito é só desvincular abstração de implementação, sem a flexibilidade de tornar as abstrações intercambiáveis (a não ser que estas possuam a mesma interface, o que na maioria das vezes nao é o caso).
Entendi bem?


Se vc criar umaboa hierarquia vc poderá intercambia-las sim!

 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team