SoFunction
Updated on 2025-03-06

Simple Observer Mode Example Sharing


using System;
using ;

namespace Demo
{
#region abstraction layer, defines observer pattern
    /// <summary>
/// (Abstract) News
    /// </summary>
    public interface INews
    {
        void SubScribe(ISubscriber s);
        void UnSubScribe(ISubscriber s);
void Publish(string newsTitle);   // Establish a publish and subscription connection during the specific implementation process
    }

    /// <summary>
/// (Abstract) Subscriber
    /// </summary>
    public interface ISubscriber
    {
        void Read(string newsTitle);
    }
    #endregion

#region implementation layer is a concrete implementation of the abstract layer
    /// <summary>
/// (Specific) News
    /// </summary>
    public class ITNews : INews
    {
        private List<ISubscriber> readers = new List<ISubscriber>();

        public void SubScribe(ISubscriber s)
        {
            (s);
        }

        public void UnSubScribe(ISubscriber s)
        {
            if ( >= 0)
            {
                (s);
            }
        }

        public void Publish(string newsTitle)
        {
            foreach (ISubscriber i in readers)
            {
(newsTitle);            //<<<<< Subscribe when publishing>>>>>
            }
        }
    }

    /// <summary>
/// (Specific) Subscribers
    /// </summary>
    public class Subscriber : ISubscriber
    {
        private string subscriber = ;
        public Subscriber(string subscriber)
        {
            = subscriber;
        }

        public void Read(string newsTitle)
        {
(("{0}read IT news\"{1}\"", subscriber, newsTitle));
        }
    }
    #endregion

    public class Pro
    {
        static void Main(string[] args)
        {
            ITNews news = new ITNews();
Subscriber zs = new Subscriber("Zhang San"),
ls = new Subscriber("Li Si"),
ww = new Subscriber("Wang Wu");

            (zs);
            (ls);
            (ww);
(ls); //Zhang San unsubscribe

("The 2014 mobile e-commerce battle: How did Alibaba break the deadlock?");
("Can Yu'ebao return to high yields?");

            ();
            ();
        }
    }
}