设计模式之观察者模式

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

namespace ObserverPattern1
{
    /// <summary>
    /// 主题项 提供某种主题供观察者“观察”
    /// </summary>
    public interface ISubject
    {
        //注册观察者
         void RegeistObserver(IObsever o);
        //观察者取消订阅
         void RemoveObserver(IObsever o);
        //提醒所有订阅人员
         void NotifiObserver();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ObserverPattern1
{
    /// <summary>
    /// 观察者
    /// </summary>
    public interface IObsever
    {
         void Update(Magzine m);
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ObserverPattern1
{
    //显示接口
    public interface IDisplayContent
    {
         void Display();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ObserverPattern
{
    //杂志类
    public class Magzine
    {
        public string name, title, type;
        public Magzine(string name, string title, string type)
        {
            this.name = name;
            this.title = title;
            this.type = type;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ObserverPattern
{
    //杂志社类
    class PeriodicalOffice:ISubject
    {
        //杂志社应该掌握那些人订阅了本杂志社的杂志
        List<IObsever> lobserver = new List<IObsever>();
        //杂志社和杂志是依赖关系
        private Magzine magzine = null;

        public PeriodicalOffice()
        {
            
        }
        
        //有人订阅了
        public void RegeistObserver(IObsever o)
        {
            lobserver.Add(o);
        }
        
        //有人取消订阅了
        public void RemoveObserver(IObsever o)
        {
            lobserver.Remove(o);
        }
    
        //通知所有订阅者
        public void NotifiObserver()
        {
            foreach (IObsever item in lobserver)
            {
                item.Update(magzine);
            }
        }

        public void PublicMagzine(Magzine m)
        {
            this.magzine = m;
            this.NotifiObserver();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ObserverPattern
{
    //读者
    class Reader:IObsever,IDisplayContent
    {
        string name = "";
        Magzine magzine = null; 

        //读者会订阅某一杂志社的杂之,同时告诉杂志社自己的名字
        public Reader(ISubject s,string name)
        {
            this.name = name;
            s.RegeistObserver(this);
        }
       
       //实现IObserver的接口方法
        public void Update(Magzine m)
        {
            magzine = m;
            Display();
        }
         
         //实现IDisplayContent的接口方法
        public void Display()
        {
            Console.WriteLine(name+"订阅了"+magzine.name+" 杂志标题:"+magzine.title+" 杂志类型:"+magzine.type);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ObserverPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            PeriodicalOffice po = new PeriodicalOffice();
            Reader Tom = new Reader(po,"Tom");
            Reader Black = new Reader(po,"Black");
            Reader Jack = new Reader(po,"Jack");
            Magzine magzine = new Magzine("天下足球", "中国队进入世界杯了", "体育");
            po.PublicMagzine(magzine);
            Console.ReadLine();
        }
    }
}


你可能感兴趣的:(设计模式,C#)