Modo adaptador
Definir um padrão de adaptador (inglês: padrão adaptador) às vezes é chamado de estilo de embalagem ou embalagem. Transfira uma interface de uma classe para o que o usuário espera. Uma adaptação faz classes que não podem funcionar juntas devido à incompatibilidade da interface.
Existem dois tipos de modos adaptadores:
1. Modo adaptador de objeto - o adaptador de objeto atende à interface de expectativa do usuário por meio da associação e também reduz o acoplamento ruim entre os códigos. Recomenda -se usar "adaptação de objetos" em seu trabalho.
2 Modo adaptador de classe - neste modo adaptador, o adaptador herda suas classes implementadas (geralmente herança múltipla). Não há herança múltipla em Java, então não a apresentarei aqui.
concluir
1. Target - define o método que o cliente precisa usar.
2. Adaptador - herde ou implemente o destino e adapte aos métodos adaptados ao Target.
3. Adaptated - Defina um método existente.
4. Métodos de chamada de cliente no Target.
public class Adaptee {public void specificRequest () {System.out.println ("Olá, eu sou de Adaptee!"); }} interface pública Target {public void request (); } Adaptador de classe pública implementos de destino {adaptation Adaptee; public adaptador () {Adaptee = new Adaptee (); } public void request () {adaptae.specificRequest (); }} classe pública client {public static void main (string [] args) {Target Target = new Adapter (); Target.Request (); }}Para implementar o padrão de adaptador de classe, precisamos do adaptador para herdar o Adapated.
Cenários aplicáveis
1. Se você deseja usar uma classe antiga e sua interface não atende às suas necessidades, poderá usar a classe adaptadora como classe de mediação.
2. Você deseja criar uma classe de uso geral que possa chamar as interfaces de algumas classes não relacionadas para você usar.
Modo de ponte
A motivação às vezes um resumo deve ter implementações diferentes. Por exemplo, existem duas maneiras de salvar dados, um é o método de arquivo e o outro é o método do banco de dados. A prática usual é herdar a classe que salva dados e, em seguida, implementar maneiras diferentes de salvar dados. O problema é que é difícil modificar e estender o método de salvamento, e o método de salvamento não pode ser alterado em tempo de execução.
Definir um padrão de ponte é um dos padrões mais complexos em um padrão de design de software, que separa as partes abstratas das coisas de suas peças de implementação para que todas possam mudar de forma independente.
Por exemplo, "Circle" e "Triangle" são classificados sob a forma "abstrata", enquanto "desenho de círculo" e "Triângulo de desenho" são classificados na categoria "desenho" que percebe o comportamento e, em seguida, o "desenho" é chamado por "forma".
1. Resumo - Defina métodos abstratos.
2. AbstractImpl - Use a interface de implementação para implementar métodos abstratos.
3. Implementador - define interfaces para comportamentos específicos de implementação.
4. ConcreteImplementor1, ConcreteImplementor2 - Implemente a interface do implementador.
/ ** "implementor"*/ interface drawingapi {public void drawcircle (duplo x, duplo y, raio duplo); }/** "concreteImplementor" 1/2*/classe DrawingApi1 implementa DrawingApi {public void drawcircle (duplo x, duplo y, raio duplo) {System.out.printf ("API1.Circle em %f: %f Radius %f/n", x, y, raio); }}/** "concreteImplementor" 2/2*/classe drawerApi2 implementa DrawingApi {public void drawcircle (duplo x, duplo y, raio duplo) {System.out.printf ("api2.Circle at %f: %f raio f/n", x, y, raio); }} / ** "abstração"* / forma da interface {public void draw (); // RESIMENTO PÚBLICO DE BOW-LEVENCIONAL RESIMENTEBYPERCENTAGEM (DUPLE PCT); // alto nível}/ ** "Abstração refinada"*/ ClassHape implementos da forma {private x, y, raio; Drawingapi Private Drawingapi; Public CirclesHape (duplo x, y duplo, raio duplo, drawingapi drawingapi) {this.x = x; this.y = y; this.radius = raio; this.drawingapi = drawerApi; } // implementação de baixo nível IE específico public void draw () {drawerapi.drawcircle (x, y, raio); } // de alto nível, ie abstrato específico public void redizeyByPercentage (duplo pct) {raio *= pct; }} / ** "client"* / classe BridgePattern {public static void main (string [] args) {shape [] shapes = new Shape [2]; formas [0] = novo circleshape (1, 2, 3, novo drawingAPI1 ()); formas [1] = novo círculo (5, 7, 11, novo drawingAPI2 ()); para (forma da forma: formas) {shape.ResizeByPercentage (2.5); shap.Draw (); }}} Exemplo
1. Salve os dados mencionados na motivação.
2. Estrutura de desenho dos gráficos. Semelhante à implementação no código acima.
Cenários aplicáveis
1. Você não deseja que a abstração e a implementação tenham um relacionamento fixo, mas espera que a implementação possa ser modificada em tempo de execução.
2. As peças abstratas e de implementação podem ser expandidas de forma independente, sem se afetar.