ÿ¸öÈ˵ÄÈËÉúÓÌÈçÒ»¸ö¸öССµÄԲȦ£¬Ëæ×Åʱ¼äµÄÍÆÒÆ£¬Õâ¸öÔ²ÂýÂýµÄÂýÂýµÄ³¤´ó£¬Ô²ÀïÃæÊÇÒ»¸ö¹ý³Ì£¬·×·±¸´ÔÓ×ÅÄÇÒ»¶ÎÒ»¶ÎµÄ¾Àú¡£´ÓͯÄ꿪ʼ£¬Ò»Ö±µ½ÀÏÄêÂäÄ»£¬ÎÒÃǶ¼Ò»Ö±ÔÚÈËÉúµÄÎę̀ÉϾ¡ÇéÑÝÒï×Ô¼ºµÄ¹ÊÊ¡£½ñÌìÎÒÃǵÄÉè¼ÆÄ£Ê½¾Í´ÓÈËÉú¿ªÊ¼ËµÆð£¬ÈËÉúÓÐ×ÅÎå¸öÃ÷È·µÄ½×¶Î£¬´ÓͯÄ꣬ÉÙÄ꣬ÇàÄ꣬ÖÐÄ꣬һֱµ½ÀÏÄêÂäÄ»£¬Ò²¿ÉÒÔÕâô˵£¬È˵ÄÒ»Éú·ÖΪÎå¸ö״̬£¬ÍðÈçÎÒÃÇÉè¼ÆÄ£Ê½ÖеÄ״̬ģʽ£¬Ê×ÏÈÎÒÃÇÀ´¿´Ò»ÏÂ״̬ģʽµÄ½á¹¹Í¼£º

ÒÔÎÒÃǵÄÈËÉúΪÀý£¬¿´¿´×´Ì¬Ä£Ê½ÊÇÈçºÎ»îÔ¾×ÅÎÒÃÇÈËÉúµÄÎę̀£º< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgIMrXz8iz6c/z17TMrMDgLS0tLS2z6c/zwOAgTGlmZVN0YXRlPC9wPgo8cD4gICAgICAgIDwvcD4KPHByZSBjbGFzcz0="brush:java;"> //¶¨ÒåÒ»¸ö³éÏóµÄLifeStateÀà public abstract class LifeState { public abstract void ChangeLife(Life l); } ¾ßÌåµÄÈËÉú½×¶Î
//ͯÄê½×¶Î-ChildhoodState
class ChildhoodState: LifeState
{
public override void ChangeLife(Life l)
{
Console.WriteLine("ͯÄêÊÇһƬÎÞ±ßÎ޼ʵÄÀ¶Ì죬°üÄÉÁËÎÞÏ޵ľ°Ïó!");
l.State= new JuvenileState();
}
}
//ÉÙÄê½×¶Î-JuvenileState
class JuvenileState :LifeState
{
public override void ChangeLife(Life l)
{
Console .WriteLine("ÉÙÄêÒªÓÃЦÁ³È¥×·Ñ°ÃÎÏë£¬Ãæ¶ÔÃÎÏ룬ӽÓÃÎÏë!");
l.State= new YouthState();
}
}
//ÇàÄê½×¶Î- YouthState
class YouthState :LifeState
{
public override void ChangeLife(Life l)
{
Console.WriteLine("ÃÀÀöµÄ¶¹Þ¢Ä껪£¬´ÓÇàɬ×ßÏò³ÉÊì!");
l.State = new MidlifeState ();
}
}
//ÖÐÄê½×¶Î-MidlifeState
class MidlifeState :LifeState
{
public override void ChangeLife(Life l)
{
Console.WriteLine("ÖÐÄêµÄÄ㣬ÊÇ·ñʵÏÖ×Ô¼ºµÄÔ¸Íû£¬ÂúÒâµÄ¹¤×÷£¬ÐÒ¸£µÄ¼ÒÍ¥!");
l.State= new ElderyState();
}
}
//ÀÏÄê½×¶Î-ElderyState
class ElderyState:LifeState
{
public override void ChangeLife(Life l)
{
Console .WriteLine ("×îÃÀ²»¹ýϦÑôºì!");
}
} ÈËÉúÀà-----Life
//¶¨ÒåÒ»¸öÈËÉúÀà-Life
public class Life
{
//³õʼ»¯µ±Ç°ÈËÉú
private LifeState state;
public Life(LifeState state)
{
this.state = state;
}
public LifeState State
{
get { return state; }
set { state = value; }
}
public void ChangeLife() //·½·¨Ãû¿ÉÒԸıä
{
state.ChangeLife(this);
}
}
¿Í»§¶Ë´úÂ룺
static void Main(string[] args)
{
Life life = new Life( new ChildhoodState());
life.ChangeLife();
life.ChangeLife();
life.ChangeLife();
life.ChangeLife();
life.ChangeLife();
Console.Read();
} ÔËÐнá¹ûÈçÏ£º

״̬ģʽÖ÷Òª½â¾öµÄÊǵ±¿ØÖÆÒ»¸ö¶ÔÏó״̬ת»¯µÄÌõ¼þ±í´ïʽ¹ýÓÚ¸´ÔÓʱµÄÇé¿ö£¬°Ñ״̬µÄÅжÏÂß¼×ªÒÆµ½±íʾ²»Í¬×´Ì¬µÄһϵÁÐÀ൱ÖУ¬¿ÉÒ԰Ѹ´ÔÓµÄÅжÏÂß¼¼ò»¯£¬×ܵÄÀ´Ëµ¾ÍÊǵ±Ò»¸ö¶ÔÏóµÄÄÚÔÚ״̬¸Ä±äʱÔÊÐí¸Ä±äÆäÐÐΪ£¬Õâ¸ö¶ÔÏó¿´ÆðÀ´ÊǸıäÁËÆäÀà¡£
ÔÚÃæÏò¶ÔÏóÈí¼þÉè¼ÆÊ±£¬³£³£Åöµ½Ä³Ò»¸ö¶ÔÏóÓÉÓÚ״̬µÄ²»Í¬¶øÓв»Í¬µÄÐÐΪ¡£Èç¹ûÓÃif else»òÊÇswitch caseµÈ·½·¨´¦Àí£¬¶ÔÏó²Ù×÷¼°¶ÔÏóµÄ״̬¾ÍñîºÏÔÚÒ»Æð£¬Åöµ½¸´ÔÓµÄÇé¿ö¾Í»áÔì³É´úÂë½á¹¹µÄ»ìÂÒ¡£ÔÚÕâÖÖÇé¿öÏ£¬¾Í¿ÉÒÔʹÓÃ״̬ģʽÀ´½â¾öÎÊÌâ¡£