C++實現設計模式:Bridge Pattern


注:爲了簡要說明,類的成員函數均採用inline。

#ifndef _DRIVE_GAME_H_
#define _DRIVE_GAME_H_

#include "DriveGameImpl.h"

#include <iostream>
using std::cout;
using std::endl;

class DriveGame
{
public:
    DriveGame(DriveGameImpl* impl):_impl(impl){}

    virtual ~DriveGame(){}
    virtual void init()
    {
        cout<<"Init the game."<<endl;
        _impl->display();
        _impl->flush();
    }
    virtual void startGame() = 0
    {
        //Omit for brief description.
    }
    
private:
    DriveGameImpl* _impl;
};

class DriveGame_3D:public DriveGame
{
public:
    DriveGame_3D(DriveGameImpl* impl):DriveGame(impl)
    {
        //Omit for brief description.
    }

    ~DriveGame_3D()
    {
        //To clear the status of the game.
    }

    virtual void startGame()
    {
        init();
        cout<<"Start 3D Drive Game."<<endl;
    }

private:
    //Omit for brief description.
};

class DriveGame_2D:public DriveGame
{
public:
    DriveGame_2D(DriveGameImpl* impl):DriveGame(impl)
    {
        //
    }

    ~DriveGame_2D()
    {
        //To clear the status of the game.
    }
    virtual void startGame()
    {
        init();
        cout<<"Start 2D Drive Game."<<endl;
    }

private:
    //Omit for brief description.
};

#endif



#ifndef _DRIVE_GAME_IMPL_H_
#define _DRIVE_GAME_IMPL_H_

#include <iostream>
using std::cout;
using std::endl;
using std::string;

class DriveGameImpl
{
public:
    virtual ~DriveGameImpl(){}
    virtual void display()=0{}
    virtual void flush()=0{}
    
};

class LinuxDriveGameImpl:public DriveGameImpl
{
public:
    ~LinuxDriveGameImpl(){}
    void display()
    {
        cout<<"Linux system: display the game."<<endl;
    }
    void flush()
    {
        cout<<"Linux system: flush the game."<<endl;
    }
};

class WindowsDriveGameImpl:public DriveGameImpl
{
public:
    ~WindowsDriveGameImpl(){}
    void display()
    {
        cout<<"windows system: display the game."<<endl;
    }
    void flush()
    {
        cout<<"windows system: flush the game."<<endl;
    }
};

#endif


#include <iostream>

#include "DriveGame.h"
#include "DriveGameImpl.h"

using std::cout;
using std::endl;
using std::string;

int main()
{
    DriveGameImpl* linuxGameImpl = new LinuxDriveGameImpl();
    DriveGame* game_2D_Linux = new DriveGame_2D(linuxGameImpl);
    game_2D_Linux->startGame();
    
    system("PAUSE");
}




發佈了96 篇原創文章 · 獲贊 26 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章