Adaptador en modo Adaptador (modo de diseño c ++)


Convierta la interfaz de una clase en otra interfaz que desee el cliente. El modo adaptador permite que las clases con interfaces incompatibles trabajen juntas

Ventajas del modelo

  • Desacoplar la clase de destino y la clase de adaptador
  • Mayor transparencia y reutilización de clases
  • La flexibilidad y la escalabilidad son muy buenas

Desventajas del modelo

  • Un adaptador de clase solo puede adaptarse a un adaptador a la vez, y el adaptador no puede ser la clase final. La clase abstracta de destino solo puede ser una interfaz, no una clase
  • El método de reemplazar la clase de adaptador con el adaptador de objeto en el adaptador es problemático

Entorno aplicable

El sistema necesita utilizar clases existentes (adaptadores), y las interfaces de estas clases no satisfacen las necesidades del sistema, e incluso sin el código fuente de estas clases,
crear una clase reutilizable (clase de destino / adaptador) para y Algunas clases que no están muy relacionadas entre sí, incluidas algunas clases que pueden introducirse en el futuro, funcionan juntas

Código de modo de adaptador

Adaptador de clase


/*
 * @ Description: C++ Design Patterns___Adapter(Class scope)
 * @ version: v1.0
 * @ Author: WeissxJ
 */
#include<iostream>

class Target
{
    
    
public:
    virtual ~Target();
    virtual void request()=0;
    //...
};

class Adaptee
{
    
    
public:
    ~Adaptee(){
    
    }
    void specificRequest(){
    
    
        std::cout<<"specific request"<<std::endl;
    }
    // ...
};

class Adapter :public Target,private Adaptee
{
    
    
public:
    virtual void request(){
    
    
        specificRequest();
    }
    //...
};

int main(){
    
    
    Target *t=new Adapter();
    t->request();
    delete t;

    return 0;
}

Adaptador de objeto


/*
 * @ Description: C++ Design Patterns___Adapter(Object scope)
 * @ version: v1.0
 * @ Author: WeissxJ
 */
#include<iostream>

class Target
{
    
    
public:
    virtual ~Target();
    virtual void request()=0;
    //...
};

class Adaptee
{
    
    
public:
    ~Adaptee(){
    
    }
    void specificRequest(){
    
    
        std::cout<<"specific request"<<std::endl;
    }
    // ...
};

class Adapter :public Target
{
    
    
public:
    Adapter():adaptee(){
    
    }

    ~Adapter(){
    
    
        delete adaptee;
    }
    
    void request(){
    
    
        adaptee->specificRequest();
        //...
    }
    //...
private:
    Adaptee *adaptee;
    // ...
};

int main(){
    
    
    Target *t=new Adapter();
    t->request();
    delete t;

    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_43477024/article/details/112885526
Recomendado
Clasificación