ADAPTER-适配器(结构型模式)

  将一个类的接口转换成客户希望的另外一个接口。

代码实现

一、对象适配器结构实现(基于组合)
class Target{//目标接口,client可以直接调用
public:
    virtual void printName(){
        
    };
};

class Adaptee{//已经存在的接口,此接口需要适配
public:
    std::string getName(){
        return std::string("karl");
    }
};

class Adapter : public  Target{//适配器,对Adaptee接口与Target接口进行适配
public:
    Adapter(Adaptee *adap){
        adaptee = adap;
    }
   void printName () override {
        std::cout<<adaptee->getName()<<std::endl;
    }
private:
    Adaptee *adaptee;
};

int main(){//client,用户只能调用Target相关接口
    Adaptee *a;
    Target *target =new Adapter(a);
    target->printName();
};

二、类适配器结构实现(基于继承)
class Target{//目标接口,client可以直接调用
public:
    virtual void printName(){

    };
};

class Adaptee{//已经存在的接口,此接口需要适配
public:
    std::string getName(){
        return std::string("karl");
    }
};

class Adapter : public  Target, private Adaptee{//对Adaptee接口与Target接口进行适配,私有继承了Adaptee来实现适配
public:
   void printName () override {
        std::cout<<this->getName()<<std::endl;
    }
};

int main(){//client
    Target *target = new Adapter();
    target->printName();
};

适用性

  • 使用一个已经存在的类(Adaptee),但是它的接口不符合要求。
  • 创建一个可以复用的类,该类可以与其他不相关的类或者不可预见的类协同工作。
  • 使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口,对象适配器可以适配它的父类接口。

效果

  比较多的会使用对象适配器

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。