DreamWorks

Never say Never。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++设计模式之代理模式

Posted on 2013-07-30 00:24  _Babyface  阅读(157)  评论(0编辑  收藏  举报

源码在VC++ 6.0通过编译

 1 #include "ProxyHeader.h"
 2 #include <string>
 3 #include <iostream>
 4 
 5 using namespace std;
 6 
 7 class IPlayer{
 8 public:
 9     virtual void Login(string name,string password) = 0;
10     virtual void KillBoss() = 0;
11     virtual void Upgrade() = 0;
12 };
13 
14 class GamePlayer : public IPlayer
15 {
16 public:
17     GamePlayer(string name,string password);
18     virtual void Login(string name,string password);
19     virtual void KillBoss();
20     virtual void Upgrade();
21 private:
22     int grade;
23     string name;
24     string password;
25 };
26 
27 class PlayerProxy : public IPlayer
28 {
29 public:
30     IPlayer* iplayer;
31     PlayerProxy(IPlayer* iplayer){
32         this->iplayer = iplayer;
33     }
34     virtual void Login(string name,string password)
35     {
36         this->iplayer->Login(name,password);
37     }
38     virtual void KillBoss(){
39         this->iplayer->KillBoss();
40     }
41     virtual void Upgrade(){
42         this->iplayer->Upgrade();
43     }    
44 };
View Code
 1 //ProxySrc.cpp
 2 #include "ProxyHeader.h"
 3 
 4 
 5 GamePlayer::GamePlayer(string name,string password):grade(0){
 6     this->name = name;
 7     this->password = password;
 8 }
 9 void GamePlayer::Login(string name,string password)
10 {
11     cout<<"登录名:"<<this->name<<",密码为:"<<this->password<<endl;
12 }
13 void GamePlayer::KillBoss(){
14     cout<<this->name<<"正在杀BOSS"<<endl;
15 }
16 void GamePlayer::Upgrade(){
17     ++grade;
18     cout<<this->name<<"已经"<<grade<<"级了"<<endl;
19     }
20 
21 int main(int argc, char **argv)
22 {
23     IPlayer* iplayer1 = new GamePlayer("Jerome","1986");
24     IPlayer* iplayer2 = new GamePlayer("Jessica","1987");
25     IPlayer* iplayerproxy1 = new PlayerProxy(iplayer1);
26     IPlayer* iplayerproxy2 = new PlayerProxy(iplayer2);
27 
28     iplayerproxy1->Login("游戏代练1","2013");
29     iplayerproxy1->KillBoss();
30     for (int i=0;i<10;i++)
31     {
32         iplayerproxy1->Upgrade();
33     }
34 
35     iplayerproxy2->Login("游戏代练2","2013");
36     iplayerproxy2->KillBoss();
37     for (i=0;i<10;i++)
38     {
39         iplayerproxy2->Upgrade();
40     }
41 
42     return 0;
43 }
View Code