Modo Adaptador Adaptador (modo de design c ++)


Converta a interface de uma classe em outra interface desejada pelo cliente. O modo adaptador permite que classes com interfaces incompatíveis trabalhem juntas

Vantagens do modelo

  • Desacople a classe de destino e a classe do adaptador
  • Maior transparência de classe e capacidade de reutilização
  • Flexibilidade e escalabilidade são muito boas

Desvantagens do modelo

  • Um adaptador de classe só pode se adaptar a um adaptador por vez, e o adaptador não pode ser a classe final. A classe abstrata de destino só pode ser uma interface, não uma classe
  • O método de substituição da classe do adaptador pelo adaptador de objeto no adaptador é problemático

Ambiente aplicável

O sistema precisa usar as classes existentes (adaptador), e as interfaces dessas classes não atendem às necessidades do sistema, e mesmo sem o código-fonte dessas classes,
crie uma classe reutilizável (classe de destino / adaptador) para e Algumas classes que não são muito relacionadas entre si, incluindo algumas classes que podem ser introduzidas no futuro, funcionam juntas

Código do modo adaptador

Adaptador de classe


/*
 * @ 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;
}

Acho que você gosta

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