O modo de ponte do padrão de design java (6)

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.

Enciclopédia Baidu

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

Código completo

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 ~

Acho que você gosta

Origin blog.csdn.net/weixin_44819566/article/details/112387613
Recomendado
Clasificación