适配器模式(adapter)c++版本

来源:互联网 发布:python求平均值函数 编辑:程序博客网 时间:2024/06/11 02:18

大话设计模式中的适配器模式(adapter)c++版本

/* * adapter.cpp * *  Created on: Sep 28, 2017 *      Author: clh01s@163.com *      适配器模式将一个类的接口转换成客户希望的另外一个接口 */#include <iostream>#include <string>using namespace std;//基类class Player{public:    Player(string name){_name = name;}    virtual ~Player(){};    virtual void Attack() = 0;    virtual void Definse() = 0;protected:    string _name;};//继承基类实现其虚函数class Forwards:public Player{public:    Forwards(string name):Player(name)    {    }    void Attack() override    {        cout<<_name<<"前锋进攻"<<endl;    }    void Definse() override    {        cout<<_name<<"前锋防守"<<endl;    }};//继承基类实现其虚函数class Center:public Player{public:    Center(string name):Player(name)    {    }    void Attack() override    {        cout<<_name<<"中锋进攻"<<endl;    }    void Definse() override    {        cout<<_name<<"中锋防守"<<endl;    }};//继承基类实现其虚函数class Guards:public Player{public:    Guards(string name):Player(name)    {    }    void Attack() override    {        cout<<_name<<"后卫进攻"<<endl;    }    void Definse() override    {        cout<<_name<<"后卫防守"<<endl;    }};//外籍中锋模拟接口不同的类class ForeignCenter{public:    string get_name(){return _name;}    void set_name(string name){_name = name;}    void Attack(){cout<<_name<<"外籍中锋进攻"<<endl;}    void Definse(){cout<<_name<<"外籍中锋防守"<<endl;}private:    string _name;};//适配器类继承基类,通过在内部声明一个外籍中锋的实例来操作外籍中锋的动作(模拟翻译的效果)class Translator:public Player{public:    Translator(string name):Player(name)    {        wjzf->set_name(name);    }    void Attack() override    {        wjzf->Attack();    }    void Definse() override    {        wjzf->Definse();    }private:    //外籍中锋实例    ForeignCenter *wjzf = new ForeignCenter();};int main(){    Player* b = new Forwards("巴蒂尔");    b->Attack();    Player* m = new Guards("麦克格雷迪");    m->Definse();    //声明适配器类通过适配器类调用外籍球员的操作    Player* ym = new Translator("姚明");    ym->Attack();    ym->Definse();    return 0;}
运行结果clh@clh:~/testcode/设计模式$ ./a.out 巴蒂尔前锋进攻麦克格雷迪后卫防守姚明外籍中锋进攻姚明外籍中锋防守

适配器模式的使用情景(摘抄于《设计模式》):
1.你想使用一个已经存在的类,而它的接口不符合你的需求。
2.你想创建一个可以复用的类,该雷可以与其它不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作
3.(仅适用于对象Adapter)你想使用一个已经存在的类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
转载请注明源地址:http://blog.csdn.net/clh01s

原创粉丝点击