大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
类的内部维护一个State类指针,函数实现都是调用State指向对象的函数,这样当State指向的对象改变时,类的函数实现也跟着改变了。

#include <iostream>


using namespace std;

class State;

//Druid类中Name方法实际调用的都是State的Name
class Druid
{
public:
    Druid(State
* p):state(p){}
    
void ChangeState(State* p) {state = p;}
    
void Name();
private:
    State
* state;
}
;

//不同的state子类实现不同的name
class State
{
public:
    
virtual void Name() = 0;
}
;

class Bear: public State
{
public:
    
void Name() {cout<<"Bear"<<endl;}
}
;

class Cat: public State
{
public:
    
void Name() {cout<<"Cat"<<endl;}
}
;

//调用内部状态的方法,当state改变时,Druid的Name效果也跟着改变
void Druid::Name()
{
    state
->Name();
}


int main()
{
    State
* pc = new Cat;
    State
* pb = new Bear;
    Druid
* pd = new Druid(pc);
    
    pd
->Name();
    pd
->ChangeState(pb);
    pd
->Name();

    delete pd;
    delete pb;
    delete pc;
    
return 0;
}
posted on 2009-06-10 16:23 大胖 阅读(149) 评论(0)  编辑 收藏 引用 所属分类: Design Pattern

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理