O modo de ponte do padrão de design java ⑥
O amor exige esforço e boa vontade.Quando você deseja obter um amor inesquecível, deve estar preparado para suportar sofrimentos inesquecíveis, caso contrário, não tente levianamente.
Aprendizagem de padrões de design, vou postar cerca de 23 padrões de design em um futuro próximo , fique atento ~
- 2021/1/9
O que é o modo bridge?
O modo bridge, também chamado de modo bridge , separa a parte abstrata de sua parte de realização para que todas possam ser alteradas independentemente.
cenas a serem usadas
Quando descobrimos que uma classe tem vários níveis de herança, podemos considerar o uso do padrão de ponte, usando agregação em vez de herança.
Por exemplo
Dê uma olhada nesta foto:
网络图(1.1)
:
análise:
Suponha que vamos comprar um computador e o computador está dividido em:
- Desktop PC
- computador portátil
- tábua
Os computadores de mesa podem ser subdivididos em desktops Lenovo, desktops Apple, etc., assim como notebooks e tablets.
Se você escreve código com o pensamento normal, é necessário considerar a classe de computador como a base principal?
Então, os computadores desktop, laptops e tablets herdam da classe de informática
Finalmente, desktop Lenovo, desktop Apple e desktop Dell herdado de computadores desktop ...
Então, qual é o problema se estiver escrito assim?
Se não houver relação de herança múltipla, uma camada é uma camada de herança, o código será altamente acoplado, levando ao código não é propício para a manutenção, e você muda um lugar, outro lugar é susceptível de entrar em conflito,
Por exemplo, se eu quiser mudar o monitor de um computador desktop, mudei um lugar e herdar sua subclasse pode causar conflitos . (A subclasse aqui se refere a desktop Lenovo, desktop Apple, desktop Dell)
Veja o desktop Lenovo como exemplo:
- Lenovo é uma marca
- Computador é um produto
Misturar marcas e produtos em categorias individuais viola o princípio de responsabilidade única
Soluções
网络图(1.2)
:
Seria muito melhor se você escrevesse o código assim?
Coloque Apple, Lenovo e Dell em marcas
Tablets, notebooks e desktops são classificados em tipos
Se eu quiser o desktop da Apple, é a posição da caixa vermelha (vista 网络图(1.2)
)
Se eu quiser o notebook Lenovo é a posição da caixa azul (vista 网络图(1.2)
)
Se eu quiser o tablet da Apple, é a posição da moldura preta (visualização 网络图(1.2)
)
Veja o desktop da Apple como exemplo:
网络图(1.3)
:
Os desktops pertencem à categoria, a Apple pertence à marca e o ponto de conexão deles é a ponte
Todos deveriam ter uma solução agora?
Marca e tipo são transformados em uma classe abstrata separadamente
Então, Apple, Lenovo e Dell realizam a categoria de marca
Tipo de implementação de desktop tablet notebook
Em seguida, combine-os por combinação, de modo que a 'ponte' seja realizada
Código
Categoria de marca IBrand:
public abstract class ABrand {
public abstract void info();
}
AType type class:
public abstract class AType {
public abstract void type();
}
Em seguida, implemente-o separadamente:
Dell é uma marca que realiza a marca:
public class Dell extends ABrand {
@Override
public void info() {
Log.i("桥接模式","戴尔");
}
}
Lenovo é uma marca que realiza a marca:
public class Lenovo extends ABrand {
@Override
public void info() {
Log.i("桥接模式","联想");
}
}
Computador (computador) é um tipo, realiza AType e combina marca (ABrand):
public class Computer extends AType {
private ABrand brand;//相当于桥 品牌
public Computer(ABrand brand) {
this.brand = brand;
}
@Override
public void type() {
brand.info();
Log.i("桥接模式:","电脑");
}
}
Computador (notebook) é um tipo, realiza AType e combina marca (ABrand):
public class Notebook extends AType {
private ABrand brand;
public Notebook(ABrand brand) {
this.brand = brand;
}
@Override
public void type() {
brand.info();
Log.i("桥接模式:","笔记本");
}
}
Use o código (exemplo um):
//电脑 品牌
Computer computer = new Computer(new Lenovo());
computer.type();
Apresente a marca Lenovo no computador e obtenha o computador Lenovo
Log图(2.1)
:
Use o código (exemplo dois):
//电脑 品牌
Computer computer = new Computer(new Lenovo());
computer.type();
Notebook notebook = new Notebook(new Dell());
notebook.type();
novo notebook, importe a marca Dell, obtenha notebook Dell!
Log图(2.1)
:
Resumindo
beneficiar:
- O modo bridge é ocasionalmente semelhante à herança múltipla, mas a herança múltipla viola o princípio da responsabilidade única e tem pouca capacidade de reutilização. O modo bridge reduz muito o número de subclasses, basicamente mantém o custo e reduz o gerenciamento.
- O modo bridge satisfaz o princípio de abertura e fechamento (aberto para expansão, fechado para modificação). Se você adicionar uma nova 'latitude', por exemplo, a marca Raytheon, poderá obter facilmente computadores Raytheon, notebooks Raytheon, etc.
Desvantagens:
- O modo de ponte aumentará a dificuldade de design do código, e a relação de agregação é estabelecida na camada abstrata, que possui certos requisitos para desenvolvedores
- O modo ponte é adequado para 2 'latitudes' independentes (marca e tipo), que tem certas limitações
Catálogo de padrões de design / princípios de design
Originalidade não é fácil, seus gostos são o seu maior apoio para mim, deixe seus gostos ~