适配器模式
文章目录
适配器模式(
Adapter
),将一个类的接口转换成客户希望的另外接口。(比如变压器et)
Adapter
模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
- 主要解决的原本的类已经有了,但却不能直接使用,而且短时间内无法改造它,或者压根就无法改造的时候就需要适配它。
也就是说,当系统数据和行为都是正确的时候,但是接口不符合,这时候就使用Adapter
适配器模式C++实现
假设,现在有现有的各种动物,都是现成的,有猫、狗
。他们都有各自的方法比如说,卧倒,打滚等,但是呢,他们的接口又不一样。为了使主人
去让猫、狗
做动作的接口一致,就需要适配器。因为语言不通,一个喵喵喵,一个汪汪汪。
adpter.h
#include <iostream>
class DOG {
public:
void Dog_Bedding() { std::cout << "小狗子,请卧倒" << std::endl; }
void Dog_Roll() { std::cout << "小狗子,请打滚" << std::endl; }
};
class CAT {
public:
void Cat_Bedding() { std::cout << "小猫咪,请卧倒" << std::endl; }
void Cat_Roll() { std::cout << "小猫咪,请打滚" << std::endl; }
};
class Target {
public:
virtual void Bedding()=0; // 外部符号
virtual void Roll()=0;
};
class adpter_cat : public Target {
public:
adpter_cat(CAT* c) : cat_(c) {}
void Bedding() { cat_->Cat_Bedding(); }
void Roll() { cat_->Cat_Roll(); }
private:
CAT* cat_;
};
class adpter_dog : public Target {
public:
adpter_dog(DOG* d) : dog_(d) {}
void Bedding() { dog_->Dog_Bedding(); }
void Roll() { dog_->Dog_Roll(); }
private:
DOG* dog_;
};
main.cc
// #include "Adpter_cat.h"
// #include "Adpter_dog.h"
// #include "cat.h"
// #include "dog.h"
#include "adpter.h"
int main() {
CAT* cat = new CAT();
DOG* dog = new DOG();
adpter_cat ac(cat);
adpter_dog ad(dog);
ac.Bedding();
ac.Roll();
ad.Bedding();
ad.Roll();
}
运行结果
小猫咪,请卧倒
小猫咪,请打滚
小狗子,请卧倒
小狗子,请打滚