青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

菜菜成長日記

勤奮,踏實,在生活中學習,在學習中快樂……
posts - 4, comments - 2, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

C++實現策略(Strategy)模式

Posted on 2008-04-28 19:09 程誠成 閱讀(518) 評論(0)  編輯 收藏 引用 所屬分類: 設計模式(DesignPatten)

    策略(Strategy)模式,是比較簡單的一種設計模式,但它的應用卻隨處可見。下面模擬游戲中常用的打斗場面,來理解策略模式。在游戲中,通常有n個角色,每個角色都能發出動作:fight。每個角色都使用不同的武器,并且可以更換武器。下面是此場景簡化的C++實現:

    Strategy.h

#ifndef _STRETEGY_H_
#define _STRETEGY_H_

//定義武器接口
class WeaponBehavior
{
public:
    
void virtual useWeapon() = 0;
}
;

class Sword:public WeaponBehavior
{
public:
    
void useWeapon();
}
;

class Axe:public WeaponBehavior
{
public:
    
void useWeapon();
}
;

class Arrow:public WeaponBehavior
{
public:
    
void useWeapon();
}
;

class Knife:public WeaponBehavior
{
public:
    
void useWeapon();
}
;

//定義角色接口
class Character
{
public:
    Character()
    
{
        weapon 
= 0;
    }

    
void setWeapon(WeaponBehavior *w)
    
{
        
this->weapon = w;
    }

    
void virtual fight() = 0;
protected:
    WeaponBehavior 
*weapon;
}
;

class King:public Character
{
public:
    
void fight();
}
;

class Queen:public Character
{
public:
    
void fight();
}
;

class Knight:public Character
{
public:
    
void fight();
}
;

class Troll:public Character
{
public:
    
void fight();
}
;


#endif

說明:
    1.因為每個武器的使用方式不同,所以將使用武器的行為封裝成接口,利用此接口調用具體武器的useWeapon行為。
    2.因為每個角色都有打斗,更換武器的行為,各個角色的打斗行為不同,而更換武器的行為相同,所以將setWeapon在Character中實現,而打斗行為在各個具體的角色中實現。

Strategy.cpp
#include <iostream>
#include 
"Strategy.h"
using namespace std;
void Sword::useWeapon()
{
    cout 
<< "Use Sword to stuck!" << endl;
}


void Axe::useWeapon()
{
    cout 
<< "Use Axe to chop!" << endl;
}


void Knife::useWeapon()
{
    cout 
<< "Use Knife to kill!" << endl;
}


void Arrow::useWeapon()
{
    cout 
<< "Use arrow!" << endl;
}


void King::fight()
{
    cout 
<< "The king:" ;
    
if ( this->weapon == NULL)
    
{
        cout 
<< "You don't have a weapon! Please Set Weapon!" << endl;
    }

    
else
    

        weapon
->useWeapon();
    }

}


void Queen::fight()
{
    cout 
<< "The Queen:" ;
    
if ( this->weapon == NULL)
    
{
        cout 
<< "You don't have a weapon! Please Set Weapon!" << endl;
    }

    
else
    
{  
        weapon
->useWeapon();
    }

}


void Knight::fight()
{
    cout 
<< "The Knight:" ;
    
if ( this->weapon == NULL)
    
{
        cout 
<< "You don't have a weapon! Please Set Weapon!" << endl;
    }

    
else
    
{  
        weapon
->useWeapon();
    }

}


void Troll::fight()
{
    cout 
<< "The Troll:";
    
if ( this->weapon == NULL)
    
{
        cout 
<< "You don't have a weapon! Please Set Weapon!" << endl;
    }

    
else
    
{  
        weapon
->useWeapon();
    }

}


main.cpp
#include <iostream>
#include 
"Strategy.h"
using namespace std;
int main()
{
    
//聲明武器
    WeaponBehavior *sw = new Sword();//聲明劍
    WeaponBehavior *axe = new Axe();//聲明斧頭
    WeaponBehavior *arr = new Arrow();//聲明弓箭
    WeaponBehavior *kn = new Knife();//聲明刀
    
    
//聲明角色
    Character *kin = new King();
    Character 
*qu = new Queen();
    Character 
*kni = new Knight();
    Character 
*tr = new Troll();
    
    
//調用打斗行為
    kin->fight();
    qu
->fight();
    kni
->fight();
    tr
->fight();
    cout 
<< endl;

    
//更換武器
    kin->setWeapon(sw);
    kin
->fight();
    cout 
<< endl;

    kin
->setWeapon(arr);
    kin
->fight();

    
return 0;
}


策略(Strategy)模式體現了2個重要的面向對象設計原則:
    1.封裝變化。
    2.針對接口編程。

參考資料:深入淺出設計模式第一章1  深入淺出設計模式第一章2

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产免费看| 亚洲欧美一区二区精品久久久| 在线观看国产精品淫| 欧美专区在线播放| 亚洲一区精品电影| 国产欧美日韩一区二区三区在线 | 久久久噜噜噜久久狠狠50岁| 亚洲第一页在线| 久久精品亚洲精品| 久久精品国产一区二区三区免费看 | 久久夜色精品国产| 亚洲日本电影| 99在线|亚洲一区二区| 欧美色图一区二区三区| 亚洲欧美日本日韩| 欧美www视频| 最新亚洲一区| 国产精品激情电影| 噜噜噜噜噜久久久久久91| 麻豆免费精品视频| 欧美一区二区三区在线免费观看| 欧美亚洲在线播放| 亚洲人成网站777色婷婷| 亚洲一区三区在线观看| 亚洲日本欧美天堂| 久久久天天操| 欧美在线观看一二区| 欧美乱妇高清无乱码| 久久资源av| 国产日韩欧美制服另类| 国产一区深夜福利| 亚洲免费在线| 亚洲影视中文字幕| 欧美激情视频在线播放| 免费看的黄色欧美网站| 国产欧美一区二区三区沐欲| 亚洲网友自拍| 亚洲免费一区二区| 国产精品夜夜夜| 亚洲天天影视| 欧美大片免费观看在线观看网站推荐| 亚洲欧美一区二区视频| 欧美另类在线播放| 日韩一级裸体免费视频| 亚洲综合日本| 国产日韩欧美在线视频观看| 久久精品91久久久久久再现| 久久精品国产综合精品| 国产亚洲欧美日韩在线一区| 久久五月激情| 亚洲精品国产精品国产自| 夜夜爽av福利精品导航 | 欧美激情第三页| 亚洲综合欧美| 91久久久久| 欧美伊人久久| 亚洲精品日本| 国产一区二区精品久久91| 久久久久五月天| 在线亚洲伦理| 欧美成人在线网站| 亚洲欧美另类中文字幕| 一本色道久久综合精品竹菊| 美女精品一区| 午夜日韩视频| 性久久久久久| 麻豆国产精品一区二区三区| 99精品国产福利在线观看免费| 国产精品一区二区三区四区 | 蜜臀久久99精品久久久久久9| 蜜桃av一区二区三区| 亚洲欧美一区二区激情| 亚洲精品永久免费| 精品91久久久久| 国产视频观看一区| 亚洲高清在线视频| 销魂美女一区二区三区视频在线| 亚洲国产片色| 亚洲日本中文字幕| 亚洲电影免费在线| 在线成人中文字幕| 狠狠色综合网| 永久免费毛片在线播放不卡| 国内外成人免费激情在线视频网站| 国产精品久久久久影院色老大 | 亚洲二区在线| 国产一区二区三区av电影| 国产精品一国产精品k频道56| 欧美性大战xxxxx久久久| 欧美精品在线视频| 欧美极品欧美精品欧美视频| 欧美大片专区| 免费在线欧美黄色| 久久人人看视频| 亚洲国产精品成人精品| 亚洲乱码国产乱码精品精可以看| 亚洲精品九九| 欧美亚洲一区| 欧美国产精品v| 国产日韩精品一区二区三区在线| 精品盗摄一区二区三区| 亚洲午夜未删减在线观看| 欧美在线三区| 亚洲欧洲免费视频| 欧美一级日韩一级| 欧美美女日韩| 尤物九九久久国产精品的分类| 一区二区三区www| 亚洲一区在线观看视频| 老巨人导航500精品| 亚洲一本大道在线| 欧美极品一区| 亚洲国产精品成人一区二区| 国产精品极品美女粉嫩高清在线| 国产一区二区三区在线观看网站| 亚洲第一色在线| 国产精品国产三级国产普通话三级| 欧美区一区二| 亚洲国产老妈| 老牛影视一区二区三区| 午夜视频在线观看一区| 欧美日韩在线亚洲一区蜜芽| 亚洲欧洲另类| 欧美国产日韩一区二区在线观看| 性欧美xxxx大乳国产app| 国产精品免费看久久久香蕉| 午夜精品美女自拍福到在线| 亚洲综合色丁香婷婷六月图片| 欧美日韩一区二区三区四区在线观看 | 免费在线观看精品| 在线不卡欧美| 亚洲国产欧美一区| 美女主播精品视频一二三四| 好看的日韩视频| 欧美成人免费播放| 欧美成人一区二区| 亚洲欧美成人精品| 久久美女艺术照精彩视频福利播放| 亚洲电影网站| av不卡在线| 在线观看免费视频综合| 最近中文字幕日韩精品 | 亚洲国产欧美一区二区三区丁香婷| 久久嫩草精品久久久久| 欧美精品国产| 久久精品视频在线播放| 欧美激情视频网站| 欧美一区二区观看视频| 久久久精品五月天| 老司机亚洲精品| 久久亚洲精选| 欧美激情一区二区三区蜜桃视频| 午夜精品一区二区三区在线视| 欧美一区在线看| 亚洲一区二区三区四区中文 | 欧美日韩天天操| 欧美高清视频一区二区| 国产日韩精品视频一区二区三区 | 久久精品国产欧美激情| 国产九九精品| 99在线热播精品免费99热| 韩国av一区二区| 久久九九久久九九| 久久久久久午夜| 亚洲午夜一区二区| 欧美日韩1234| 亚洲激情社区| 亚洲三级国产| 欧美精品偷拍| 日韩午夜av电影| 在线中文字幕一区| 欧美日韩一区二区在线观看| 亚洲国产99精品国自产| 99国内精品久久久久久久软件| 欧美成人免费在线视频| 亚洲精品久久久久久下一站| 一区二区三区成人 | 久久午夜影视| 亚洲精品久久久久久久久久久久| 一本一本久久| 国产日韩一区欧美| 欧美成人dvd在线视频| 99视频在线精品国自产拍免费观看| 亚洲欧美日韩专区| 激情亚洲成人| 欧美精品情趣视频| 久久成人羞羞网站| 亚洲美女中文字幕| 久久青草福利网站| 亚洲在线第一页| 久久精品网址| 一区二区三区鲁丝不卡| 欧美激情精品久久久| 亚洲一区久久久| 亚洲精品综合精品自拍| 狠狠操狠狠色综合网| 国产精品你懂的在线| 欧美日韩激情小视频| 欧美国产日韩一区二区| 久久夜色精品国产|