故事与模式(2)

      公元 2054 , 30 界世界杯亚洲区外围赛中,中国队的最后一场比赛对韩国 , 只有战胜对手才能出线。 自从米卢执教中国队以来 , 已经有五十多年中国队再也没尝到过进军世界杯的滋味,而且恐韩症已经染了七十年之久.很多球迷从黑发人看成了白发人,但是还有部分的痴心球迷关注着这场比赛.
痴心球迷

足球比赛

         static   void  Main( string [] args)
        {
            FootballMatch match 
=   new  FootballMatch();
            Audience justin 
=   new  Audience( " justin " );
            Audience terry 
=   new  Audience( " terry " );
            match.Observers.Add(justin);
            match.Observers.Add(terry);
            match.Play();
        }

    足球比赛中可能不只球员,还有天气,裁判等各要素,需要让足球比赛和它的观察者们偶合度更小,我们尝试着用委托和事件来重构它.
足球比赛
      任何关注足球比赛的人或者事都可以通过注册事件的方式来关注它,偶合度更加松散,意味着更加灵活,这不正是ISP(接口隔离原则)所提倡的嘛:一个类对另外一个类的依赖性应当是建立在最小接口上的。下面代码中不但有足球比赛中的观众,还有天气.
     
         static   void  Main( string [] args)
        {
            FootballMatch match 
=   new  FootballMatch();
            Audience justin 
=   new  Audience( " justin " );
            Audience terry 
=   new  Audience( " terry " );
            match.BeforeMatch 
+=   new  MatchHandler(match_BeforeMatch);
            match.BeforeMatch 
+= new  MatchHandler(justin.Excited);
            match.BeforeMatch 
+= new  MatchHandler(terry.nervous);
            match.AfterMatch 
+= new  MatchHandlerEnd(justin.KnowResult);
            match.AfterMatch 
+= new  MatchHandlerEnd(terry.KnowResult);
            match.AfterMatch 
+=   new  MatchHandlerEnd(match_AfterMatch);
            match.Play();
        }

        
static   void  match_AfterMatch( bool  isWin)
        {
            
if  (isWin)
            {
                Console.WriteLine(
" Snow.. " );
            }
            
else
            {
                Console.WriteLine(
" Rain.. " );
            }
        }

        
static   void  match_BeforeMatch()
        {
            Console.WriteLine(
" wind. " );
        }
    通过带参数的委托可以实现中国队赢球或输球后不同的结果.
故事与模式(2)
   当中国队输球了,愤怒的观众把电视机砸了,天空也开始下雨了.
   你也可以任意添加观察者到这场足球比赛里,只要符合所定义委托的规定就行.
   僵化的代码需要重构,落后的中国足球体制是不是也需要重构呢?

你可能感兴趣的:(模式)