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?");
();
();
}
}
}