e fala pessoal nessa aula a gente vai falar sobre o padrão de projeto bridge aqui esse é um padrão também estrutural e ele é basicamente igual adapter tá então se você entendeu a estrutura é de código do adaptar você não vai ter problema algum convite porque ele e dentro e esse é um caso onde um padrão é igual ao outro só que o que muda entre os dois é a intenção é a gente vai ver isso um pouquinho mais para frente no slide que mais ou bridge tem uma intenção pouco diferente da do adaptador beleza
então o bridge é um padrão de projeto estrutural que tenha intenção de desacopla uma abstração da sua implementação de modo que as duas possam variar e evoluir independentemente nesse caso em específico essa intenção é o que pode confundir aqui a por conta das palavras abstração e sua implementação por que que a gente não tá falando especificamente de classes abstratas ou de interfaces a gente está falando de abstração como o código de alto nível implementação o código de baixo nível beleza vamos dar uma olhada nessas palavras de abstração e implementação só para gente passar a régua
nisso aqui abstração é um código de alto nível que geralmente delegação para outro outros objetos aqui no caso então a abstração geralmente vai ter alguma dependência para algum outro objeto porque ela vai delegar tarefas para esse outro objeto aqui no caso já implementação do código é o código de realmente faz o trabalho então é desse modo que eles estão usando aqui as palavras abstração e implementação beleza e a existem variações disso daqui não se você olhar abstração e abstração e implementação no lado do código você vai ver que é uma classe abstrata ea implementação é
uma classe que estende essa classe abstrata implementa os métodos dessa classe abstrata tá então por isso que pode gerar essa confusão o ok vamos dar uma olhada num problema e esse nesse padrão de projeto eu quero começar a trazendo um problema que pode ocorrer aqui com a herança no caso aqui e como que a gente vai solucionar esse problema com bridge quer imagine por exemplo que eu tenha uma abstração no caso aqui essa abstração por exemplo na minha aplicação poderia ser um controle remoto por exemplo e a para implementar esse controle remoto eu tenho marcas
diferentes marcas de dispositivos diferentes não pensa assim então tem o controle remoto que da samsung por exemplo que controla dispositivos da samsung controle remoto da sony controla dispositivos da sony em algum momento meu código eu posso adicionar uma nova marca aí por exemplo eu passo até panasonic por exemplo então eu tenho um controle remoto da panasonic se você observar esse código não há nada de errado aqui não tem nenhum problema nesse código aqui o problema começa aparecer quando a abstração e a implementação que e essa abstração e essa implementação começam a crescer juntas por exemplo
imagine que na minha estrutura eu programei o meu código dessa maneira aqui mas ele que eu queira agora adicionar um novo tipo de controle remoto só que esse novo tipo de controle remoto tem as mesmas funções desse controle remoto então nesse caso específico ele tem as mesmas funções mas eu vou adicionar mais coisas nesse controle remoto não presa vocês controle tem a aumentar o volume abaixar o volume ligar por exemplo desligar o próximo que eu implementado já vai ter essas coisas e mais as coisas dele então quando eu falo isso dessa maneira por você a
gente a pensa logo de cara bom eu posso estender essa classe aqui do mesmo jeito que eu fiz isso daqui o problema é que os meus dispositivos também devem funcionar com esse novo controle remoto então se eu fizer isso dessa maneira que eu tô te falando o que vai acontecer isso daqui ó eu vou ter uma classe que implementa essa interface e daí dentro a classe dessa classe abstrata eu vou ter implementações para cada dispositivo aqui beleza então nesse momento do código seja começa a ver que a estrutura começa a ficar meio assim complexa né
mil grande demais uma ideia aqui é muito profundo aqui no caso e isso só vai piorar por exemplo imagine que eu queira agora tem um outro controle remoto que tem as mesmas funções de si e de si no caso aqui só que ele implementa mais coisas suponha que ele tenha por exemplo with esse controle remoto se eu fizer isso da maneira que eu te expliquei agora eu vou ter que duplicar toda essa estrutura aqui de novo então fazendo assim eu tenho o wi-fi um controle remoto wi-fi e eu tenho as implementações desse controle remoto e
isso só tende a crescer imagina agora que eu tenho que adicionar uma nova marca de dispositivo uma nova marca por exemplo lg aqui no caso se eu fizer isso olha o que acontece com uma estrutura ela vai só crescer beleza então isso dá e você tá vendo tende a crescer make de maneira exponencial né no caso eu tenho que sempre adicionar mais coisas e mais coisas e mais coisas na estrutura nesse caso específico o bridge vai ser a salvação do nosso padrão aqui que a gente está seguindo porque nesse caso ao invés de herança a
gente vai optar por composição então ao invés da gente fazer essa estrutura dessa maneira a gente vai fazer essa estrutura dessa maneira ou seja eu tenho uma abstração como é falado lá pela intenção do gang of four seria um código que vai delegar tarefas para outro código e eu tenho uma implementação no caso aqui e aí em uma das 11 aqui eu posso manter uma dependência para outra aqui no caso não nesse caso é a minha habilitação aqui depende de um dispositivo que também é uma abstração aqui no caso fala depende de um dispositivo qualquer
aqui beleza e aí por exemplo suponha aqui no controle remoto eu tenho o botão de power para ligar e quando eu chamar esse método de dentro do controle remoto eu vou simplesmente delegar isso para o dispositivo beleza não que eu vou fazer chamada device que eu voltei aqui uma referência para o the voice aqui no caso bem eu vou chamar device ponto 7 power igual a no caso aqui o que eu tô fazendo aqui é um togam né no caso diferente the device ponto de arte power ele não toda vez que eu chamar isso ou
eu ligo ou eu desligo a tv isso aqui é chamado de togo eu não sei se todas as linguagens de programação suportam isso aqui mas eu posso fazer essa inversão de valores dessa maneira com o sinal de negação aqui beleza então isso daqui se você observar e se você observou também o padrão de projeto adapter ele é exatamente dessa maneira que ele funciona então se você olhar um padrão de projeto bridge eo padrão de projeto adapter depois de construído você não vai ver essa diferença aqui beleza então isso aqui foi a solução que eu coloquei
para gente resolver o problema da nossa a hierarquia que tem uma explosão de classes aqui no caso né mas a estrutura real oficial que está no livro só para você ter aí em mente é essa daqui é a mesma coisa que a gente tem ele eu nem vou entrar muito em detalhes aqui que é a mesma coisa que a gente tem aqui só que nesse caso específico eu tenho menos - classes aqui no caso né não tenho um cliente que usa a abstração aqui no caso abstração tem o implemento que no caso que é a
implementação da abstração só que ao invés de herança aqui a gente está trabalhando com composição a mesma coisa se eu chamar de dentro de por exemplo we find abstract aqui esses são os nomes que estão no livro ali o método dos santos tem eu posso chamar daqui de dentro que é esse coisinha que é da implementação aqui que vai estar aqui dentro eu posso chamar o método sampling qualquer coisa eu coloquei esses nomes aqui só para você ver que pode ser qualquer coisa eu posso chamar esse método daqui em qualquer coisa e os métodos aqui
nas implementações de qualquer outra coisa é a mesma coisa novamente do a data eu tô basicamente fazendo essa interface inteira essa estrutura que conversar com essa estrutura aqui beleza e daí esse lado seria a parte da abstração que a gente falou na intenção lá e essa parte seria a parte da implementação só para te lembrar aqui eu vou voltar aqui na intenção tá o bridge é um padrão de projeto estrutural que tem a intenção de desacoplar uma abstração da sua implementação de modo que as duas possam variar e evoluir independentemente vamos voltando aqui nesse slide
é a mesma coisa aqui eu posso ter vários se a gente voltar aqui no controle remoto aqui eu posso ter vários tipos de controles remotos e aqui eu posso ter vários tipos de dispositivos ele não precisa funcionar como um dispositivo especificamente beleza e daí é só é sim as duas coisas eu creio por exemplo touch control eu passo para dentro do touch control uma tv ou o rádio uma luz aqui o que você quiser passar para dentro desse controle remoto sim que você chamar o método todo o power ele vai chamar o método de dentro
aqui do rádio ou da light ou da tv tanto faz beleza então isso que a gente tem que agora já que a gente falou eu quero te trazer diferença entre o bridge e o adapter que no caso do próprio livro tá na esquina viu que tô falando não se aqui tá na página 208 do livro padrões de projeto da gang of four em português tá então a diferença chave entre esses padrões está nas suas intenções o padrão adapter faz as coisas funcionarem após elas terem sido projetadas ou seja geralmente você vai usar o adapter na
refatoração do cório o bridge faz as coisas funcionarem antes que elas existam ou seja nesse caso você já conhece bom então você vai aplicar o padrão de projeto buriti porque antes de você começar a fazer o código você já sabe como é que aquilo vai terminar de casa beleza aplicabilidade do padrão break vai ser use o padrão bridge quando você souber que sua estrutura terá abstrações que é o código de alto nível que vai delegar coisas para o código de baixo nível e implementações dessa abstração detalhes que possam variar de maneira independente então o que
eu te falei se eu tiver uma abstração nesse sentido né que eu tenho vários controles remotos e vários dispositivos e ambos podem variar independentemente eu posso usar o padrão bridge aqui no caso quando você souber que o adapter poderia ser aplicado naquela estrutura ou seja você já conhece a estrutura quando você for aplicar você já pode aplicar o padrão de projeto político porque você já conhece a estrutura então você já aplicam adapter bridge só que tô fazendo antes do caso de dar algum problema no caso você já conhece a estudou então esse padrão passa chamar
bridge você quiser dividir uma classe que possa ter diversas variantes aqui no caso e aí é porque a gente tá falando como por exemplo se você pegar o classe de produtos e suas variações de cores e você fosse trabalhar com herança nesse caso você teria que ter uma classe de prot e uma classe de cor por exemplo no caso não no caso aqui você poderia só ter a classe de produt e daí você deveria estender essa classe falando que você tem um um produto que seja uma caneta azul uma caneta vermelha daí você tem um
novo produto camiseta aí você tem uma camiseta azul uma camiseta vermelha e assim por diante isso faz uma explosão de classes dentro do seu sistema beleza então nesse caso era seria interessante utilizar o padrão brites aqui no caso também tem no livro se você quiser trocar implementações em tempo de execução você pode fazer isso com grid porém javscript já trabalha basicamente em tempo de execução com gente não precisa focar isso aqui eu só quis te trazer porque se você tiver trabalhando em uma linguagem de programação que é como já vou por exemplo você mais mais
é nesse caso específico você pode trocar as implementações em tempo de execução beleza o que que é bom no padrão de projeto rede aqui ele diz a cópula o código da abstração do código da implementação então o código da abstração e o código da implementação sendo desacoplados eu tô aplicando o single responsibility principle né no caso ele implemento opencloud principal aqui no caso ao permitir novas abstrações e ou implementações para código existente existentes eu acho que a mamãe eu ia se não todos os padrões de projeto vai aplicar esses esses princípios da programação orientada a
objetos beleza a além disso ele tem as oi gente só adaptar porque ele é basicamente igual a data ele usa composição ao invés de herança e o que que é ruim nesse padrão de projeto aqui se você utilizar o bridge ou adapter em locais incorretos você pode ao invés de corrigir um problema você pode trazer mais problemas porque você pode aumentar a complexidade da aplicação quando a implementação for realizada em um local incorreto ali beleza é nessas aulas aqui como esses padrões são maiores eu não vou trazer a implementação a gente vai fazer a implementação
na parte do parte plástica beleza então eu vou deixar a parte prática cama para próxima aula então eu te vejo na próxima aula onde a gente vai realmente colocar a mão no código beleza grande abraço