Adapter模式C++实现

本文通过C++代码示例介绍了如何使用Adapter模式使火鸡类模仿鸭子类的行为,包括咕咕叫声转换为呱呱叫声及调整飞行方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:《Head First设计模式》第七章Adapter模式C++实现,用火鸡来模仿鸭子。

 

鸭子类Duck.h:

#pragma once
#include <iostream>
using namespace std;

//鸭子
class IDuck
{
public:
    virtual ~IDuck(){}

    //呱呱叫
    virtual void Quack() = 0;
    //飞行
    virtual void Fly() = 0;
};

//绿头鸭
class CMallardDuck : public IDuck
{
public:
    void Quack()
    {
        cout<<"Quack"<<endl;
    }

    void Fly()
    {
        cout<<"I'm flying"<<endl;
    }
};

 

火鸡类Turkey.h:

#pragma once
#include <iostream>
using namespace std;

//火鸡
class ITurkey
{
public:
    virtual ~ITurkey(){}

    //咕咕叫
    virtual void Gobble() = 0;
    //飞行
    virtual void Fly() = 0;
};

class CWildTurkey : public ITurkey
{
public:
    void Gobble()
    {
        cout<<"Gobble gobble"<<endl;
    }

    void Fly()
    {
        cout<<"I'm flying a short distance"<<endl;
    }
};

 

适配器类TurkeyAdapter.h:

#pragma once
#include "Duck.h"
#include "Turkey.h"

//用火鸡模仿鸭子
class CTurkeyAdapter : public IDuck
{
public:
    CTurkeyAdapter(ITurkey* pTurkey)
        : m_pTurkey(pTurkey)
    {

    }

    void Quack()
    {
        m_pTurkey->Gobble();
    }

    void Fly()
    {
        //火鸡飞行距离短,飞行五次模拟鸭子
        for (int i = 0; i < 5; i++)
        {
            m_pTurkey->Fly();
        }
    }

private:
    ITurkey* m_pTurkey;
};

 

调用方法:

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
 int nRetCode = 0;

 // initialize MFC and print and error on failure
 if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
 {
  // TODO: change error code to suit your needs
  _tprintf(_T("Fatal Error: MFC initialization failed\n"));
  return 1;
 }

    //创建鸭子
    IDuck* pDuck = new CMallardDuck();
    //创建火鸡
    ITurkey* pTurkey = new CWildTurkey();
    //创建火鸡适配器
    IDuck* pAdapter = new CTurkeyAdapter(pTurkey);

    cout<<"The Turkey says..."<<endl;
    pTurkey->Gobble();
    pTurkey->Fly();

    cout<<"\nThe Duck says..."<<endl;
    pDuck->Quack();
    pDuck->Fly();

    cout<<"\nThe TurkeyAdapter says..."<<endl;
    pAdapter->Quack();
    pAdapter->Fly();

    delete pAdapter;
    pAdapter = NULL;
    delete pTurkey;
    pTurkey = NULL;
    delete pDuck;
    pDuck = NULL;

 return nRetCode;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值