设计模式之观察者用委托的方式实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleDelegate514
{
    class Program
    {
        static void Main( string[ ] args )
        {
            Person person = new Person( );
            message mess = new message( person, "美女即将下凡了" );
            message mess1 = new message( person, "不要在挖鼻孔了   " );
             person.state = "气象局";

            person.AddOberser( new EventHandlers( mess1.Message ) );

            person.AddOberser( mess.Message );
            person.AddOberser( mess1.Message );
            person.Remoce( mess1.Message );

            person.Live( );

            Console.ReadLine( );
        }
    }

    //public delegate void EventHandlers( Person persin, string msg );
    public delegate void EventHandlers(  );

    public class Person
    {
        public string state { get; set; }
        List<EventHandlers> lice = new List<EventHandlers>( );

        //添加委托
        public void AddOberser( EventHandlers eventHandlers )
        {
            lice.Add( eventHandlers );
        }

        /// <summary>
        /// 移出委托
        /// </summary>
        /// <param name="eventHandlers"></param>
        public void Remoce( EventHandlers eventHandlers )
        {
            lice.Remove( eventHandlers );
        }
        /// <summary>
        /// 通知观察者
        /// </summary>
        public void Live( )
        {
            foreach ( EventHandlers eventHandlers in lice )
            {
                //this,"我是谁!"
                eventHandlers( );
            }
        }
    }

    public class message
    {
        private string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value.Trim( );
            }
        }
        private Person person;
        public message(Person person,string name )
        {
            this.person = person;
            this.name = name;
        }

        public void Message(  )
        {
            Console.WriteLine( "收到来自 {0} 的消息,男士们:{1}", person.state, name );
            Console.WriteLine( "收到来自 {0} 的消息,女士:{1}", person.state, name );
        }
    }
}

//----------------------------------------------------------------------------------------

using System.Text;
using System.Collections.Generic;
using System.Linq;
using System;

namespace 观察者
{
    public interface IServer
    {
        void Notice( IClient C);
    }

    public interface IClient
    {
        void Show();
    }

    public class Person : IClient
    {
        public Person( IServer S )
        {
           C.Notice(this);
        }
        public void Show()
        {
            Console.WriteLine("主人被惊醒了");
        }
    }

    public class Mouses : IClient
    {
        public Nouses( IServer S )
        {
            C.Notice( this );
        }
        public void Show()
        {
            Console.WriteLine("老鼠被吓跑了");
        }
    }

    public class Tom : IServer
    {
        ArrayList al =new ArrayList();
        public void Notice(IClient C)
        {
            al.Add( C );
        }

        public void Runs()
        {
            Console.WriteLine("猫叫了");
            foreach (IClient item in al)
            {
                item.Show();
            }
        }
    }
    
    class Test
    {
        static void Main(string[] args)
        {
            Tom t=new Tom();
            Person p=new Person(t);
            Mouses m =new Mouses(p);
            t.Runs();
        }
    }
}

posted @ 2012-05-23 18:17  blog_yuan  阅读(188)  评论(0编辑  收藏  举报