Modo de adaptador (Adaptador)----modo de diseño

Modo de adaptador (Adaptador)----modo de diseño

¿Qué es?

El patrón de adaptador actúa como un puente entre dos interfaces incompatibles.

inserte la descripción de la imagen aquí

El modo adaptador viene de la vida, por ejemplo, el lector de tarjetas se usa como adaptador entre la tarjeta de memoria y la computadora portátil, el enchufe de conversión de corriente es el adaptador que resuelve el desajuste entre el voltaje requerido y el voltaje real, y así sucesivamente.

Una breve introducción al patrón adaptador

inserte la descripción de la imagen aquí

En pocas palabras, el modo adaptador resuelve principalmente el problema de dos conexiones de interfaz incompatibles.

Cómo funciona el patrón de adaptador

inserte la descripción de la imagen aquí

En pocas palabras, es convertir clases incompatibles en clases compatibles para trabajar juntas a través de adaptadores .

Tres formas de implementar el patrón adaptador

  1. Adaptador de clase : La clase adaptadora hereda la clase adaptada por medio de la herencia, de modo que la operación de la clase adaptada puede usarse y cambiarse para lograr la compatibilidad de trabajo .
  1. Adaptador de objetos: al agregar la clase adaptada a la clase de adaptador y pasar la instancia de la clase adaptada de acuerdo con el método de construcción , la clase de adaptador funciona de acuerdo con esta instancia , a fin de lograr la compatibilidad de la interfaz , lo cual se recomienda.
  1. Adaptador de interfaz: al definir una clase abstracta para heredar la interfaz , sobrescriba todos los métodos en la interfaz , de modo que las subclases que hereden esta clase abstracta puedan usar selectivamente los métodos en la interfaz .

jejeje es un poco dificil de entender no importa déjame demostrarlo creo que todo el mundo lo puede entender.

Adaptador estuche pequeño

Ahora Xiaogao tiene un teléfono móvil, pero desafortunadamente no hay energía y necesita cargarse, pero el enchufe es de 220 V y el voltaje de carga del teléfono móvil es de 5 V. En este momento, es necesario diseñar un enchufe de conversión que convierta el voltaje de 220 V en voltaje de 5 V. , ¿puedes ayudar a Xiao Gao a diseñarlo?

Diseño con adaptadores de clase

Este adaptador mejora el funcionamiento de la clase adaptada a través de la herencia , logrando así la compatibilidad de voltaje.

Enchufe clase 220V

package com.design_patterns.adapter.classadapter;

public class Voltage220V {
    
    
    //输出220伏电压
    public int output220V(){
    
    
        int src = 220;
        System.out.println("电压 = " + src + "伏");
        return src;
    }
}

Una interfaz con un voltaje de salida de 5V

package com.design_patterns.adapter.classadapter;

public interface IVoltage5V {
    
    
    public int output5V();
}

Adaptador de clase para conversión de voltaje

package com.design_patterns.adapter.classadapter;

//适配器类
public class VoltageAdapter extends Voltage220V implements IVoltage5V{
    
    

    //覆写接口中的方法
    @Override
    public int output5V() {
    
    
        //获取到220V的电压
        int srcV = output220V();
        int dstV = srcV / 44;       //转成5V
        return dstV;
    }
}

teléfono móvil

package com.design_patterns.adapter.classadapter;

public class Phone {
    
    

    //充电
    public void charging(IVoltage5V iVoltage5V){
    
    
        if(iVoltage5V.output5V() == 5){
    
    
            System.out.println("电压为5V,可以充电~~~");
        } else if (iVoltage5V.output5V() > 5){
    
    
            System.out.println("电压大于5V,不可以充电~~~");
        }
    }
}

Uso y cargo del cliente

package com.design_patterns.adapter.classadapter;

public class Client {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("====类适配器模式====");
        Phone phone = new Phone();
        phone.charging(new VoltageAdapter());
    }
}

resultado de la operación

====类适配器模式====
电压 = 220伏
电压为5V,可以充电~~~

Diseño con adaptadores de objetos

Este adaptador mejora el funcionamiento de la clase adaptada por medio de la agregación , logrando así la compatibilidad de voltaje. A continuación, solo se enumeran las diferencias con el adaptador anterior .

Adaptador de objeto para conversión de tensión

package com.design_patterns.adapter.objectadapter;

//适配器类
public class VoltageAdapter implements IVoltage5V {
    
    
    private Voltage220V voltage220V;        //关联关系-聚合

    //通过构造方法得到Voltage220V的对象实例
    public VoltageAdapter(Voltage220V voltage220V) {
    
    
        this.voltage220V = voltage220V;
    }

    /**
     * 将220V的电压转换为5V的电压的方法
     * 返回转换过后的电压
     * @return
     */
    @Override
    public int output5V() {
    
    
        //获取到220V的电压
        int srcV = this.voltage220V.output220V();
        int dstV = srcV / 44;
        System.out.println("使用对象适配器适配完成!!!");
        return dstV;
    }
}

Uso y cargo del cliente

package com.design_patterns.adapter.objectadapter;

public class Client {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("====对象适配器模式====");
        Phone phone = new Phone();
        phone.charging(new VoltageAdapter(new Voltage220V()));
    }
}

resultado de la operación

====对象适配器模式====
电压 = 220伏
使用对象适配器适配完成!!!
电压为5V,可以充电~~~

Adaptador de interfaz, modo de adaptador predeterminado (carcasa pequeña personalizada)

interfaz definida

package com.design_patterns.adapter.interfaceadapter;

public interface Interface4 {
    
    
    public void m1();
    public void m2();
    public void m3();
    public void m4();
}

Clase abstracta definida

package com.design_patterns.adapter.interfaceadapter;

public abstract class AbsAdapter implements Interface4 {
    
    
    @Override
    public void m1() {
    
    

    }

    @Override
    public void m2() {
    
    

    }

    @Override
    public void m3() {
    
    

    }

    @Override
    public void m4() {
    
    

    }
}

Definir la clase de prueba para probar

package com.design_patterns.adapter.interfaceadapter;

public class Client {
    
    
    public static void main(String[] args) {
    
    
        AbsAdapter absAdapter = new AbsAdapter() {
    
    
            /**
             * 此时只需要去覆盖我们需要使用的接口方法
             */
            @Override
            public void m1() {
    
    
                System.out.println("调用的是子类m1的方法");
            }
        };
        absAdapter.m1();
    }
}

resultado de la operación

调用的是子类m1的方法

Je, je, aunque este caso es muy simple, sigue siendo muy útil en el desarrollo real, al diseñar un adaptador de clase abstracta para implementar solo los métodos que deben implementarse.

Resumir

Hasta ahora, el contenido básico del adaptador se ha resuelto, je, je, tal vez esta vez el peinado no sea particularmente vívido e interesante, solo entiéndelo, gracias ~

Supongo que te gusta

Origin blog.csdn.net/weixin_43479947/article/details/107539701
Recomendado
Clasificación