设计模式系列-状态模式(三)
context.ExperienceSpot();
context.ExperienceSpot();
context.ExperienceSpot();
context.ExperienceSpot();
context.ExperienceSpot();
运行结果如下:
1 太和殿:皇上的家的客厅真的宏伟气派啊,脑海中幻想着当时举行大型仪式的情景甚是激动!
2 乾清宫:是不是因为养心殿距离后宫很近雍正才搬过去的呀
3 御花园:御花园真的没有想象中的漂亮啊,很是失落.
4 东六宫:已经看不出当年嫔妃们生活的环境了,成展馆了.
5 九龙壁:在宫中混,不会点三十六计都没脸见人.
6 请按任意键继续. . .
那么说了半天状态模式的好处了,那么怎么样来灵活的扩展状态呢?例如:我们现在需要加入一个景点的参观神武门也就是出宫的出口,我们只需如下几步即可:
第一步:新增一个神武门状态的类,代码如下:
///
/// 神武门状态行为实例
///
public class 神武门State : ISpotState
{
public void ExperienceSpot(IPVisitContext context)
{
Console.WriteLine("神武门:终于逛完故宫很是疲惫啊.");
}
}
第二步:将九龙壁的下一个状态挂接到神武门状态,代码如下:
///
/// 九龙壁状态行为实例
///
public class 九龙壁State : ISpotState
{
public void ExperienceSpot(IPVisitContext context)
{
Console.WriteLine("九龙壁:在宫中混,不会点三十六计都没脸见人.");
context.CurrentState = new 神武门State();
}
}