״̬ģʽ֮¿´¾¡ÈËÉú°Ù̬

2014-11-23 21:57:06 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 0
ÓÐÈË˵¡°ÈËµÄÆðµãÆð³õ¶¼ÊÇÒ»ÑùµÄ£¬ÔÚºóÀ´µÄ¼Ó¼Ó¼õ¼õÖУ¬ÂýÂý³öÏÖÁ˲î¾à¡­¡­¡±ÈËÉúÊÇʲô£¿ÈËÉúÈçÄã½Åϵķ£¬È絫¶¡ÔÚ¡¶ÉñÇú¡·ÀïµÄÒ»¾ä»°¡°ÔÚÈËÉúÂó̵ÄÖÐ;¡­¡­¡±²»ÂÛÔø¾­×ö¶ÔÁËʲô£¬×ö´íÁËʲô£¬ÓÃÒ»¿ÅÐÄ¡¢Ò»ÉúÇéÈ¥¼á¶¨×ßÄãû×ßÍêµÄ·¡£ÈËÉúÊÇʲô£¿ÊÇÒ»·ùÓÅÃÀµÄ»­¾í£¬ÊÇÒ»¶ÎÀëÆæµÄ°®Çé¹ÊÊ£¬»¹ÊÇÒ»ÇúÓÆÓÆµÄÉ˸ÐÀÖÇú¡­¡­ÎÒÎÞ·¨ÐÎÈÝÈËÉúÊÇʲô£¬ÎªÊ²Ã´»áÓи÷ʽ¸÷ÑùµÄÈËÉú¾­Àú£¬ÓÐÈË¿ÞÓÐÈËЦ£¬ÓÐÈ˵­È»£¬ÓÐÈ˳¬È»£¬Ï¸¿´È˼ä¹ÊÊ£¬Æ·ËáÌð¿àÀ±¡£

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

\

ÒÔÎÒÃǵÄÈËÉúΪÀý£¬¿´¿´×´Ì¬Ä£Ê½ÊÇÈçºÎ»îÔ¾×ÅÎÒÃÇÈËÉúµÄÎę̀£º< 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µÈ·½·¨´¦Àí£¬¶ÔÏó²Ù×÷¼°¶ÔÏóµÄ״̬¾ÍñîºÏÔÚÒ»Æð£¬Åöµ½¸´ÔÓµÄÇé¿ö¾Í»áÔì³É´úÂë½á¹¹µÄ»ìÂÒ¡£ÔÚÕâÖÖÇé¿öÏ£¬¾Í¿ÉÒÔʹÓÃ״̬ģʽÀ´½â¾öÎÊÌâ¡£