1. O que é o Padrão Bridge
1.1 Definição e Conceito
O Padrão Bridge, também conhecido como padrão Bridge, é um tipo de padrão de design estrutural que desacopla a abstração e a implementação, permitindo que variem de forma independente. Em termos simples, o Padrão Bridge é uma solução que separa a abstração da implementação.
1.2 Propósito e Efeito do Padrão Bridge
O principal propósito do Padrão Bridge é desacoplar a parte de abstração de sua parte de implementação para que possam mudar e expandir independentemente. Isso é feito estabelecendo uma classe de ponte abstrata que está vinculada a uma classe de implementação concreta.
2. Características e Vantagens do Padrão Bridge
Algumas das principais características e vantagens do Padrão Bridge incluem:
- Escalabilidade aprimorada do sistema. Tanto a abstração quanto a implementação podem ser estendidas independentemente sem afetar uma à outra.
- Conformidade com o Princípio Aberto/Fechado. A parte de abstração e a parte de implementação podem ser estendidas independentemente sem afetar uma à outra.
- Transparência de detalhes de implementação para o cliente, permitindo a ocultação de detalhes de implementação do usuário.
3. Cenários de Aplicação do Padrão Bridge
- Quando se deseja separar a implementação de um objeto complexo de sua abstração, o Padrão Bridge pode ser utilizado. Isso pode ter um impacto positivo no desempenho do código existente, especialmente quando o programa utiliza apenas uma parte do objeto em tempo de execução.
- Quando é necessário compartilhar estados de implementação específicos entre vários objetos, mas, para o código do cliente, eles precisam parecer como classes independentes.
4. Implementação do Padrão Bridge em Golang
4.1 Introdução ao Diagrama de Classes UML
4.2 Etapas de Implementação Detalhadas
4.2.1 Definir a Interface de Papel Abstrato
Primeiramente, definimos uma interface DrawAPI, o código específico é o seguinte:
// Interface de papel abstrato
type DrawAPI interface {
DrawACircle(raio, x, y int)
}
4.2.2 Implementar a Classe de Papel Concreto
Em seguida, definimos duas classes, RedCircle e BlueCircle, que implementam os métodos na interface DrawAPI:
// Classe de papel concreto
type RedCircle struct {}
func (c *RedCircle) DrawACircle(raio, x, y int) {
// lógica para desenhar um círculo vermelho
}
type BlueCircle struct {}
func (c *BlueCircle) DrawACircle(raio, x, y int) {
// lógica para desenhar um círculo azul
}
4.2.3 Definir a Interface de Ponte Abstrata
Definir a interface de ponte Shape:
// Interface de ponte abstrata
type Shape interface {
Draw()
}
4.2.4 Implementar a Classe de Ponte Concreta
Implementar a classe Circle, que implementa a interface Shape e contém um objeto do tipo DrawAPI:
// Classe de ponte concreta
type Circle struct {
x, y, raio int
drawAPI DrawAPI
}
func (c *Circle) Draw() {
c.drawAPI.DrawACircle(c.raio, c.x, c.y)
}
4.2.5 Exemplo de Chamada do Cliente
func main() {
circuloVermelho := &Circle{100, 100, 10, new(RedCircle)}
circuloAzul := &Circle{100, 100, 10, new(BlueCircle)}
circuloVermelho.Draw()
circuloAzul.Draw()
}
Dessa forma, implementamos o padrão Bridge em Golang.