Observer Pattern

                                                                    Observer Pattern

通知者接口:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace Ando.Observer
 7 {
 8     public interface ISender
 9     {
10          void Add( Observer observer);
11 
12         void Remove(Observer observer);
13 
14         void Notify();
15 
16         string  SenderInfo { get; set; }
17     }
18 }

 

 

具体通知者:

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

namespace Ando.Observer
{
   public class ConcreteSender:ISender
    {
       private  IList<Observer>  observerList=new List<Observer>();

       public void Add(Observer observer)
       {
           observerList.Add(observer);
       }

       public void Remove(Observer observer)
       {
           observerList.Remove(observer);
       }

       public void Notify()
       {
           foreach (Observer observer in observerList)
           {
               observer.Update();
           }
       }

       public string SenderInfo { get; set; }
    }
}

 

 

抽象接收者:

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

namespace Ando.Observer
{
    public abstract class Observer
    {
        protected string Name;
        protected ISender Sender;

        protected Observer(string name, ISender sender)
        {
            this.Name = name;
            this.Sender = sender;
        }

        public abstract void Update();

    }
}

 

 

具体接收者:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Globalization;
 4 using System.Linq;
 5 using System.Text;
 6 
 7 namespace Ando.Observer
 8 {
 9     public class ConcreteObserver : Observer
10     {
11         public ConcreteObserver(string name, ISender sender)
12             : base(name, sender)
13         {
14         }
15 
16         public override void Update()
17         {
18             Console.WriteLine("{0} {1},", Sender.SenderInfo, Name);
19             //Console.ReadKey();
20         }
21     }
22 }

 

 

主函数代码:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using Ando.Observer;

namespace MainObserver
{
    class Program
    {
        static void Main(string[] args)
        {
            ConcreteSender security = new ConcreteSender();
            ConcreteObserver workMate=new ConcreteObserver("Ando",security);
            ConcreteObserver workMate1=new ConcreteObserver("Sweet",security);
            security.Add(workMate);
            security.Add(workMate1);
            security.SenderInfo = "写代码的速度给我加快点!";
            security.Notify();
           Console.WriteLine("~~~啦啦啦,Ando 成功写出了一个观察者模式~~~");
            Console.ReadKey();
        }
    }
}

 

 

效果:

 

posted @ 2016-06-18 22:30  公子若不胖天下谁胖  阅读(221)  评论(0编辑  收藏  举报