最近马斯克以440亿美元收购了推特,之前两个公司的运行是独立的,但是推特被收购之后,马斯克就需要对推特公司及其其他公司进行消息的发布以及人员的管理。比如现在马斯克需要对SpaceX公司以及Twitter公司进行人员的调整,但是SpaceX公司以及Twitter的公司消息发布的函数不一样。举个栗子,推特公司发布消息的函数叫做twitterPublish(),而在SpaceX公司中发布消息的函数叫做spaceXPublish()。这两个公司发布消息的方法名称不同,但是含义是一样的,现在你作为马斯克的资深工程师,你能不能提供一个方法让两个公司的消息发布函数保持一致呢?
这里就需要使用适配器模式,让两个由于接口不同而无法一起工作的类,使用适配器模式之后就能够在一起工作了。
1. 两个不同的类
在下面的代码中,定义了两个类及其它们的消息发布函数,不难得知两个类发布信息的函数名称并不一样,这就会让马斯克对两个公司的消息发布函数感到迷惑。
#include <iostream>
using namespace std;
class Twitter{
public:
virtual void twitterPublish(){
cout << "这是Twitter发布的消息" << endl;
}
};
class SpaceX{
public:
virtual void spaceXPublish(){
cout << "这是SpaceXPublish发布的消息" << endl;
}
};
2. 适配器类
为了让两个类的消息发布函数名称保持一致,我们可以借助适配器类给马斯克收购的推特类加一层外壳。在这个外壳下,其实还是调用推特的消息调用机制。
// 让适配器类能够同时管理spacex和twitter的消息发布
class AdapterM:public SpaceX{
private:
Twitter* twitter;
public:
AdapterM(Twitter* twitter):twitter(twitter){};
~AdapterM(){};
void spaceXPublish(){
twitter->twitterPublish();
}
};
3. 主函数测试结果
下面就是测试代码以及测试的结果
int main(){
SpaceX* spacex = new SpaceX();
AdapterM* twitterx = new AdapterM(new Twitter());
spacex->spaceXPublish();
twitterx->spaceXPublish();
return 0;
}