设计模式简单代码之State模式

使用State模式,一言以蔽之,技术上就是使用委托来动态改变类的行为。而语义上就是在运行时改变一个类的状态。
下面我们使用State模式来模拟交通灯的状态变化。
 交通灯就是有三种的状态变化:红黄绿,而变化的循环是:红->黄->绿->黄->红。

代码如下:

#include  < iostream >
using   namespace  std;

class  State
{
public:
    
virtual void Run() = 0;
}
;

class  RedState :  public  State
{
public:
    
void Run()
    
{
        cout 
<< "红 " << endl;
    }

}
;

class  YellowState :  public  State
{
public:
    
void Run()
    
{
        cout 
<< "黄 " << endl;
    }

}
;

class  GreenState :  public  State
{
public:
    
void Run()
    
{
        cout 
<< "绿 " << endl;
    }

}
;

class  TrafficLight
{
public:
    TrafficLight()
    
{
        
// 刚出厂的灯,运行次数为0
        _nCnt = 0;

        
// 只能运行100次,质量真差
        _nTotalCnt = 100;
    }


    
// 设置状态
    void SetState(State *s)
    
{
        _state 
= s;
    }



    
void Run()
    
{
        _state
->Run();
        _nCnt
++;
    }


    
// 灯是否坏了
    bool IsBad()
    
{
        
if(_nCnt > _nTotalCnt)
        
{
            cout 
<< "灯坏了" << endl;
            
return true;
        }

        
        
return false;
    }

private:
    State 
*_state;

    
// 表示灯的运行次数,任何设备都有消耗,即有个寿命,所以,灯在运行了一段较长的时间之后,
    
// 就会坏了
    int _nCnt;        // 当前运行的次数
    int _nTotalCnt; // 总寿命
}
;


//  实例:动态改变交通灯的状态
void  main()
{
    
// 有一个交通灯
    TrafficLight tl;

    
// 三种状态
    RedState rs;
    GreenState gs;
    YellowState ys;

    
while (!tl.IsBad())
    
{
        
// 控制状态的变化
        tl.SetState(&rs);
        tl.Run();
        tl.SetState(
&ys);
        tl.Run();
        tl.SetState(
&gs);
        tl.Run();
    }

}

总的来说,State模式比较简单,主要是用了委托的技术。我们在现实中如果碰到状态的变化的时候,都可以考虑使用这个模式。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值