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

大话设计模式中的适配器模式(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值