http://blog.csdn.net/hxhbluestar/archive/2005/03/10/316648.aspx
看完作者写的代码感觉非常烦琐,同时就如同作者所说还存在不足.利用C#的事件技术可以很好的解决上述问题.以下是实现的UML截图:

下面给出解决代码:
using System;

namespace test
{

    
public interface IObserver
    
{
        ISubject Subject
        
{
            
set;
        }

    }


    
public interface ISubject
    
{
    }


    
class Class1
    
{
        [STAThread]
        
static void Main(string[] args)
        
{
            
int i;
            CatClass catsubject
=new CatClass ();
          
            
for (i=0;i<10;i++)
            
{
                RatClass rat
=new RatClass();
                rat.Subject 
=catsubject;
            }


            ManClass man
=new ManClass();
            man.Subject
=catsubject;
           
            catsubject.Miao();
            Console.ReadLine ();
           
        }

    }


    
public class CatClass:ISubject
    
{
        
#region ICat 成员
        
public delegate void CatEventHandler(object source,EventArgs e);
        
public event CatEventHandler CatEvent;

        
public void Miao()
        
{
            Console.WriteLine (
"");
            
if (CatEvent!=null)
            
{
                CatEvent(
this,EventArgs.Empty);
            }

        }


        
#endregion

    }


    
public class RatClass:IObserver
    
{
        
#region IObserver 成员

        CatClass cat
=null;
        
public ISubject Subject
        
{
            
set
            
{
                cat
=(CatClass)value;
                cat.CatEvent
+=new test.CatClass.CatEventHandler(Run);
            }

        }


        
#endregion



        
public void Run(object source, EventArgs e)
        
{
            Console.WriteLine (
"猫来了,赶紧跑!!!");
        }


    }


    
public class ManClass:IObserver
    
{
        CatClass cat
=null;
        
#region IObserver 成员

        
public ISubject Subject
        
{
            
set
            
{
                cat
=(CatClass)value;
                cat.CatEvent
+=new test.CatClass.CatEventHandler(Wake);
            }

        }


        
#endregion


        
private void Wake(object source, EventArgs e)
        
{
            Console.WriteLine (
"主人被吵醒");
        }

    }


}

posted on 2005-08-20 17:20  forrestsun  阅读(1033)  评论(1编辑  收藏  举报