设计模式-State模式戏说

 

  在外部请求下,对多个派生类的选择方法。

 

 

  A:对象管理类

 

 

// GOF 的方式

 

class A

private:

    friend class state;

    void changestate(state*);

    state* _state;

 

void A::changestate(state* s)

{

    _state = s;

}

 

class state

public:

   void changestate(A*, state*);

 

void state::changestate(A* t, state* s);

{

    t->changestate(s);

}

 

class Ua,Ub,Uc : public state

 

changestate(t, Ua::Ua());

changestate(t, Ub::Ub());

changestate(t, Uc::Uc());

 

///////////////////////////////////////////////////////////////////////

它将逻辑关系控制权分配到state的三个派生类,由它们自己维护。后续要如何扩展?我觉得还是过程思想在作怪,^_^。

 

向大师学习!

 

class A

private:

   int stateId;

   void respond(state*); // 接受state 派生类的回传

   friend class state;

    void changestate(state*);

    state* _state;

 

void changestate(state* s)

{

   _state=s;

   _state->select(int stateId);

}

 

class state

public:

    void respond(A*, state*);

private:

    void select(int);

 

void select(int id)

{

   Switch(id)

       case 0:

           Ua* ua->Ua();

           break;

 

       case 1:

           Ub* ub->Ub();

           break;

 

      case 2:

           Uc* uc->Uc();

           break;

 

      default:

          errror();

          break;

}

 

void respond(A* t, state* s)

{

    t->respond(s);

}

 

 

class Ua,Ub,Uc : public state

 

respond(t, Ua::Ua());

respond(t, Ub::Ub());

respond(t, Uc::Uc());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值