public abstract class Subject{
public abstract class Subject
{
protected List<Observer> _listOfObservers; public string SubjectName; protected SubscriptionEngine _engine; public Subject(SubscriptionEngine connectingEngine) { _engine = connectingEngine; } public abstract void Attach(Observer o); public abstract void Detach(Observer o); public virtual void Notify() { foreach (Observer obs in _listOfObservers) { _engine.Notify(this); } } public abstract string State { get; set; }
protected List<Observer> _listOfObservers;
public string SubjectName;
protected SubscriptionEngine _engine;
public Subject(SubscriptionEngine connectingEngine)
_engine = connectingEngine;
}
public abstract void Attach(Observer o);
public abstract void Detach(Observer o);
public virtual void Notify()
foreach (Observer obs in _listOfObservers) { _engine.Notify(this); }
foreach (Observer obs in _listOfObservers)
_engine.Notify(this);
public abstract string State
get; set;
get;
set;
public class CarCommercial : Subject {
private string _state; public CarCommercial() : base(null) { this.SubjectName = "Car Commercial"; } public CarCommercial(SubscriptionEngine engine) : base(engine) { this.SubjectName = "Car Commercial"; } public override string State { get { return _state; } set { _state = "Hello"; } } public override void Attach(Observer o) { _engine.Register(this, o); } public override void Detach(Observer o) { _engine.Unregister(this, o); }
private string _state;
public CarCommercial()
: base(null)
this.SubjectName = "Car Commercial";
public CarCommercial(SubscriptionEngine engine) : base(engine)
public override string State
get { return _state; } set { _state = "Hello"; }
get { return _state; }
set { _state = "Hello"; }
public override void Attach(Observer o)
_engine.Register(this, o);
public override void Detach(Observer o)
_engine.Unregister(this, o);
public class FurnitureCommercial : Subject {
private string _state; public FurnitureCommercial() : base(null) { this.SubjectName = "Furniture Commercial"; } public FurnitureCommercial(SubscriptionEngine engine) : base(engine) { this.SubjectName = "Furniture Commercial";} public override string State { get { return _state; } set { _state = value; } } public override void Attach(Observer o) { _engine.Register(this, o); } public override void Detach(Observer o) { _engine.Unregister(this, o); }
public FurnitureCommercial()
this.SubjectName = "Furniture Commercial";
public FurnitureCommercial(SubscriptionEngine engine)
: base(engine)
get { return _state; } set { _state = value; }
set { _state = value; }
public abstract class Observer {
protected SubscriptionEngine _engine; public string Name; public List<Subject> ListOfSubjectsSubscribedTo; public Observer(SubscriptionEngine engine) { ListOfSubjectsSubscribedTo = new List<Subject>(); _engine = engine; } public abstract bool Update(Subject s);
public string Name;
public List<Subject> ListOfSubjectsSubscribedTo;
public Observer(SubscriptionEngine engine)
ListOfSubjectsSubscribedTo = new List<Subject>(); _engine = engine;
ListOfSubjectsSubscribedTo = new List<Subject>();
_engine = engine;
public abstract bool Update(Subject s);
public class CarShopper : Observer {
public CarShopper(SubscriptionEngine e) : base(e) { ListOfSubjectsSubscribedTo.Add(new CarCommercial()); this.Name = "Car Shopper"; _engine.Register(ListOfSubjectsSubscribedTo[0], this); } public override bool Update(Subject s) { foreach (Subject subject in this.ListOfSubjectsSubscribedTo) { if (subject.SubjectName == s.SubjectName) { return true; } } return false; }
public CarShopper(SubscriptionEngine e) : base(e)
ListOfSubjectsSubscribedTo.Add(new CarCommercial()); this.Name = "Car Shopper"; _engine.Register(ListOfSubjectsSubscribedTo[0], this);
ListOfSubjectsSubscribedTo.Add(new CarCommercial());
this.Name = "Car Shopper";
_engine.Register(ListOfSubjectsSubscribedTo[0], this);
public override bool Update(Subject s)
foreach (Subject subject in this.ListOfSubjectsSubscribedTo) { if (subject.SubjectName == s.SubjectName) { return true; } } return false;
foreach (Subject subject in this.ListOfSubjectsSubscribedTo)
if (subject.SubjectName == s.SubjectName) { return true; }
if (subject.SubjectName == s.SubjectName)
return true;
return false;
public class FurnitureShopper : Observer {
public FurnitureShopper(SubscriptionEngine e) : base(e) { this.Name = "Furniture Shopper"; ListOfSubjectsSubscribedTo.Add(new FurnitureCommercial()); _engine.Register(ListOfSubjectsSubscribedTo[0], this); } public override bool Update(Subject s) { foreach (Subject subject in this.ListOfSubjectsSubscribedTo) { if (subject.SubjectName == s.SubjectName) { return true; } } return false; }
public FurnitureShopper(SubscriptionEngine e) : base(e)
this.Name = "Furniture Shopper"; ListOfSubjectsSubscribedTo.Add(new FurnitureCommercial()); _engine.Register(ListOfSubjectsSubscribedTo[0], this);
this.Name = "Furniture Shopper";
ListOfSubjectsSubscribedTo.Add(new FurnitureCommercial());
public class Subscription {
private Subject _subject; private Observer _observer; public Subscription(Subject s, Observer o) { _subject = s; _observer = o; } public Subject Subject_ { get { return _subject; } } public Observer Observer_ { get { return _observer; } }
private Subject _subject;
private Observer _observer;
public Subscription(Subject s, Observer o)
_subject = s; _observer = o;
_subject = s;
_observer = o;
public Subject Subject_
get { return _subject; }
public Observer Observer_
get { return _observer; }
public class SubscriptionEngine {
List<Subscription> _listOfSubscriptions; public SubscriptionEngine() { _listOfSubscriptions = new List<Subscription>(); } public bool Contains(Subscription item) { foreach (Subscription subscription in _listOfSubscriptions) { if (subscription.Observer_.Name == item.Observer_.Name && subscription.Subject_.SubjectName == item.Subject_.SubjectName) return true; } return false; } public void Register(Subject s, Observer o) { Subscription item = new Subscription(s, o); if (!this.Contains(item)) _listOfSubscriptions.Add(new Subscription(s, o)); } public void Unregister(Subject s, Observer o) { for (int i = 0; i < _listOfSubscriptions.Count; i++) { if (_listOfSubscriptions[i].Observer_ == o && _listOfSubscriptions[i].Subject_ == s) _listOfSubscriptions.RemoveAt(i); } } public void Notify(Subject s) { foreach (Subscription subscription in _listOfSubscriptions) { if (subscription.Observer_.Update(s)) MessageBox.Show(s.SubjectName + " has sent a message to " + subscription.Observer_.Name); } }
List<Subscription> _listOfSubscriptions;
public SubscriptionEngine()
_listOfSubscriptions = new List<Subscription>();
public bool Contains(Subscription item)
foreach (Subscription subscription in _listOfSubscriptions) { if (subscription.Observer_.Name == item.Observer_.Name && subscription.Subject_.SubjectName == item.Subject_.SubjectName) return true; } return false;
foreach (Subscription subscription in _listOfSubscriptions)
if (subscription.Observer_.Name == item.Observer_.Name && subscription.Subject_.SubjectName == item.Subject_.SubjectName) return true;
if (subscription.Observer_.Name == item.Observer_.Name
&& subscription.Subject_.SubjectName == item.Subject_.SubjectName)
public void Register(Subject s, Observer o)
Subscription item = new Subscription(s, o); if (!this.Contains(item)) _listOfSubscriptions.Add(new Subscription(s, o));
Subscription item = new Subscription(s, o);
if (!this.Contains(item))
_listOfSubscriptions.Add(new Subscription(s, o));
public void Unregister(Subject s, Observer o)
for (int i = 0; i < _listOfSubscriptions.Count; i++) { if (_listOfSubscriptions[i].Observer_ == o && _listOfSubscriptions[i].Subject_ == s) _listOfSubscriptions.RemoveAt(i); }
for (int i = 0; i < _listOfSubscriptions.Count; i++)
if (_listOfSubscriptions[i].Observer_ == o && _listOfSubscriptions[i].Subject_ == s) _listOfSubscriptions.RemoveAt(i);
if (_listOfSubscriptions[i].Observer_ == o && _listOfSubscriptions[i].Subject_ == s)
_listOfSubscriptions.RemoveAt(i);
public void Notify(Subject s)
foreach (Subscription subscription in _listOfSubscriptions) { if (subscription.Observer_.Update(s)) MessageBox.Show(s.SubjectName + " has sent a message to " + subscription.Observer_.Name); }
if (subscription.Observer_.Update(s))
MessageBox.Show(s.SubjectName + " has sent a message to " + subscription.Observer_.Name);
public partial class Television : Form {
SubscriptionEngine _engine; public Television() { _engine = new SubscriptionEngine(); InitializeComponent(); } private void onTelevisionLoad(object sender, EventArgs e) { this.showCommercials(); } private void showCommercials() { FurnitureCommercial furnitureCommercial = new FurnitureCommercial(_engine); CarCommercial carCommercial = new CarCommercial(_engine); FurnitureShopper furnitureShopper = new FurnitureShopper(_engine); CarShopper carShopper = new CarShopper(_engine); furnitureCommercial.Attach(furnitureShopper); carCommercial.Attach(carShopper); _engine.Notify(furnitureCommercial); _engine.Notify(carCommercial); }
SubscriptionEngine _engine;
public Television()
_engine = new SubscriptionEngine(); InitializeComponent();
_engine = new SubscriptionEngine();
InitializeComponent();
private void onTelevisionLoad(object sender, EventArgs e)
this.showCommercials();
private void showCommercials()
FurnitureCommercial furnitureCommercial = new FurnitureCommercial(_engine); CarCommercial carCommercial = new CarCommercial(_engine); FurnitureShopper furnitureShopper = new FurnitureShopper(_engine); CarShopper carShopper = new CarShopper(_engine); furnitureCommercial.Attach(furnitureShopper); carCommercial.Attach(carShopper); _engine.Notify(furnitureCommercial); _engine.Notify(carCommercial);
FurnitureCommercial furnitureCommercial = new FurnitureCommercial(_engine);
CarCommercial carCommercial = new CarCommercial(_engine);
FurnitureShopper furnitureShopper = new FurnitureShopper(_engine);
CarShopper carShopper = new CarShopper(_engine);
furnitureCommercial.Attach(furnitureShopper);
carCommercial.Attach(carShopper);
_engine.Notify(furnitureCommercial);
_engine.Notify(carCommercial);