抽象通知者
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PublishOrSubscribe_Model
{
interface Subject
{
void Attach(Observer observer);
void Detach(Observer observer);
void Notify();
string SubjectState
{
get;
set;
}
}
}
老板
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PublishOrSubscribe_Model
{
class Boss : Subject
{
private IList<Observer> observers = new List<Observer>();
private string action;
public void Attach(Observer observer)
{
observers.Add(observer);
}
public void Detach(Observer observer)
{
observers.Remove(observer);
}
public void Notify()
{
foreach (Observer o in observers)
{
o.Update();
}
}
public string SubjectState
{
get
{
return action;
}
set
{
this.action = value;
}
}
}
}
秘书
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PublishOrSubscribe_Model
{
class Secretary : Subject
{
private IList<Observer> observers = new List<Observer>();
private string action;
public void Attach(Observer observer)
{
observers.Add(observer);
}
public void Detach(Observer observer)
{
observers.Remove(observer);
}
public void Notify()
{
foreach (Observer o in observers)
{
o.Update();
}
}
public string SubjectState
{
get
{
return action;
}
set
{
this.action = value;
}
}
}
}
抽象观察者
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PublishOrSubscribe_Model
{
abstract class Observer
{
protected string name;
protected Subject sub;
public Observer( string name,Subject sub)
{
this.name = name;
this.sub = sub;
}
public abstract void Update();
}
}
股票观察者
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PublishOrSubscribe_Model
{
class StockObserver : Observer
{
public StockObserver(string name,Subject sub) : base(name,sub)
{
}
public override void Update()
{
Console.WriteLine("{0} {1} 关闭股票行情!继续工作!",sub.SubjectState,name);
}
}
}
NBA观察者
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PublishOrSubscribe_Model
{
class NBAObserver : Observer
{
public NBAObserver(string name, Subject sub) : base(name, sub)
{
}
public override void Update()
{
Console.WriteLine("{0} {1} 关闭NBA直播! 继续工作!",sub.SubjectState, name);
}
}
}
客户端
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PublishOrSubscribe_Model
{
class Program
{
static void Main(string[] args)
{
Secretary secretary = new Secretary();
StockObserver stockObserver = new StockObserver("强爸爸", secretary);
NBAObserver nbaObserver = new NBAObserver("强爷爷", secretary);
secretary.Attach(stockObserver);
secretary.Attach(nbaObserver);
secretary.SubjectState = "老板回来了!!!";
secretary.Notify();
Console.ReadKey();
}
}
}