creativity is that spark of electricity before an explosion.
it allows us, in a single instance to explore all possibilities without hesitation.
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
The classes and/or objects participating in this example are:
|
// Observer pattern -- Structural example
|
|
using System; using System.Collections; namespace DoFactory.GangOfFour.Observer.Structural { // MainApp test application class MainApp { static void Main() { // Configure Observer pattern ConcreteSubject s = new ConcreteSubject(); s.Attach(new ConcreteObserver(s,"X")); s.Attach(new ConcreteObserver(s,"Y")); s.Attach(new ConcreteObserver(s,"Z")); // Change subject and notify observers s.SubjectState = "ABC"; s.Notify(); // Wait for user Console.Read(); } } // "Subject" abstract class Subject { private ArrayList observers = new ArrayList(); 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(); } } } // "ConcreteSubject" class ConcreteSubject : Subject { private string subjectState; // Property public string SubjectState { get{ return subjectState; } set{ subjectState = value; } } } // "Observer" abstract class Observer { public abstract void Update(); } // "ConcreteObserver" class ConcreteObserver : Observer { private string name; private string observerState; private ConcreteSubject subject; // Constructor public ConcreteObserver( ConcreteSubject subject, string name) { this.subject = subject; this.name = name; } public override void Update() { observerState = subject.SubjectState; Console.WriteLine("Observer {0}'s new state is {1}", name, observerState); } // Property public ConcreteSubject Subject { get { return subject; } set { subject = value; } } } } Output expected:
Observer X's new state is ABC
Observer Y's new state is ABC Observer Z's new state is ABC |
| [+] | Programming - WCF |
| [+] | Programming - Design patterns in Software |
| [+] | Programming - Factory Method Design Pattern |
| [+] | ASP.NET MVC Development |
| [+] | .NET Enterprise provides a truly robust and scalable platform to build business applications on I.. |
| [+] | Case studies - Software in business |
| [+] | Artificial Neural Networks |
| [+] | More news on Java OpenSource initiative |
| [+] | Human Computer Interaction |
| [+] | MySQL |
