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

菜菜成長日記

勤奮,踏實,在生活中學習,在學習中快樂……
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>
            欧美专区日韩专区| 午夜在线a亚洲v天堂网2018| 久久av老司机精品网站导航| 久久久久一区二区| 亚洲人成亚洲人成在线观看| 欧美日韩免费观看一区二区三区| 亚洲一区免费| 欧美暴力喷水在线| 亚洲性视频网址| 狠狠色丁香婷婷综合影院| 久久综合精品国产一区二区三区| 亚洲精品国产精品国自产在线| 亚洲午夜激情网站| 黄色一区三区| 欧美视频一区二区三区四区| 午夜影视日本亚洲欧洲精品| 欧美激情在线狂野欧美精品| 午夜精品网站| 亚洲美女免费精品视频在线观看| 国产精品日韩精品| 媚黑女一区二区| 亚洲免费在线观看视频| 亚洲国产三级网| 久久国产日本精品| 在线亚洲伦理| 亚洲国内自拍| 国产一区二区三区丝袜| 欧美日韩亚洲综合一区| 久久综合九色综合欧美狠狠| 亚洲一区三区在线观看| 亚洲国产美国国产综合一区二区| 久久精品动漫| 亚洲无毛电影| 亚洲精品日韩综合观看成人91| 国产精品亚洲成人| 欧美日韩一区二区精品| 老司机免费视频久久| 午夜国产精品影院在线观看| 99精品视频免费观看视频| 亚洲国产另类精品专区| 亚洲成人自拍视频| 欧美成人一二三| 久热国产精品视频| 久久精品在线观看| 欧美一区二区免费观在线| 久久超碰97中文字幕| 国产视频在线观看一区| 欧美三级乱人伦电影| 欧美刺激午夜性久久久久久久| 欧美在线观看视频一区二区三区| 亚洲视频在线播放| 日韩午夜激情电影| 亚洲欧洲一区二区天堂久久 | 亚洲电影第三页| 久久久美女艺术照精彩视频福利播放| 亚洲欧美日韩国产| 亚洲女同在线| 亚洲欧美中文日韩在线| 亚洲综合色网站| 亚洲素人在线| 中日韩高清电影网| 国产精品99久久久久久白浆小说| 99热在这里有精品免费| 99国产精品视频免费观看一公开| 亚洲国产另类久久精品| 亚洲黄色天堂| 日韩一级免费观看| 一本色道久久综合狠狠躁篇的优点 | 久久成人这里只有精品| 欧美一区二区在线视频| 欧美一级视频一区二区| 久久国产乱子精品免费女| 久久国产免费看| 美女国内精品自产拍在线播放| 噜噜噜久久亚洲精品国产品小说| 老司机aⅴ在线精品导航| 欧美岛国激情| 欧美日韩在线精品一区二区三区| 欧美日韩亚洲免费| 国产精品一区二区久久久久| 国产亚洲一区二区三区在线观看| 狠狠久久综合婷婷不卡| 亚洲黄色在线视频| 亚洲午夜av在线| 久久美女性网| 亚洲精品国产欧美| 中文欧美字幕免费| 欧美在线黄色| 蜜桃久久av| 国产精品国产三级国产专播品爱网| 国产精品自在在线| 在线观看一区二区视频| 99视频有精品| 久久久亚洲精品一区二区三区| 亚洲高清视频一区二区| 一区二区久久久久久| 午夜亚洲精品| 欧美精品亚洲二区| 国产精品亚洲аv天堂网| 精品av久久707| 夜夜嗨av一区二区三区四季av| 欧美亚洲视频| 欧美激情91| 亚洲综合不卡| 欧美电影免费观看| 国产精品自拍一区| 亚洲美女在线观看| 久久国产精品一区二区三区四区 | 国产精品久久久久久久久免费樱桃 | 91久久久亚洲精品| 亚洲男人天堂2024| 久久一区视频| 欧美专区第一页| 欧美国产精品劲爆| 国产精品热久久久久夜色精品三区| 精东粉嫩av免费一区二区三区| 亚洲精品乱码久久久久久按摩观| 亚洲欧美国产精品专区久久| 玖玖玖国产精品| 亚洲视频综合在线| 欧美a级大片| 国产精品一区二区三区观看| 亚洲国产专区校园欧美| 欧美在线地址| 亚洲美女中文字幕| 久久伊人免费视频| 国产精品午夜av在线| 亚洲激情网站免费观看| 久久精品1区| 99这里只有久久精品视频| 久久久欧美精品| 国产日韩一区二区三区在线| 一区二区三区国产盗摄| 麻豆视频一区二区| 亚洲性夜色噜噜噜7777| 欧美精品一区二区三区在线看午夜| 国语自产精品视频在线看抢先版结局| 亚洲无人区一区| 亚洲精品视频免费观看| 老司机久久99久久精品播放免费| 国产视频不卡| 午夜精品一区二区三区在线视| 亚洲欧洲日产国产网站| 欧美1区2区3区| 亚洲第一色中文字幕| 久久久欧美一区二区| 亚洲欧美日韩精品在线| 国产精品美女久久久久久免费| 一区二区久久久久久| 亚洲人成网站999久久久综合| 麻豆精品91| 亚洲激情av| 亚洲国产精品va| 欧美freesex交免费视频| 在线不卡亚洲| 麻豆成人在线| 久久国内精品视频| 国内精品视频在线观看| 久久国产精品第一页| 亚洲欧洲av一区二区| 国产一区二区三区久久| 久久精品视频在线观看| 午夜精品久久久久久久久久久久| 国产精品视频久久久| 午夜一区不卡| 亚洲欧美高清| 国产日韩视频| 久久夜色精品国产噜噜av| 欧美在线免费看| 国内精品模特av私拍在线观看| 久久女同互慰一区二区三区| 久久精品色图| 亚洲国产欧美一区二区三区同亚洲 | 亚洲免费观看在线观看| 欧美日韩精品久久久| 亚洲午夜未删减在线观看| 亚洲视频每日更新| 国产欧美日韩精品在线| 久久人人看视频| 久久久久久久久一区二区| 亚洲国产欧美久久| 亚洲精品午夜| 国产精品一区2区| 久久久亚洲成人| 欧美不卡高清| 亚洲午夜精品| 欧美亚洲视频一区二区| 黄色精品一二区| 亚洲国产精品一区二区www在线| 欧美精品在线视频观看| 亚洲尤物精选| 欧美一区午夜精品| 亚洲大片在线观看| 亚洲日本成人网| 国产毛片精品视频| 女同一区二区| 欧美日精品一区视频| 欧美在线免费视频| 蜜臀久久久99精品久久久久久| av成人激情|