obserwator
unknown
csharp
2 years ago
3.5 kB
14
Indexable
using System; using System.Collections.Generic; namespace WzorceProjektowe { public enum Genre { Sport, Politics, Economy, Science } public interface IObserver { void Update(ISubject subject); } public interface ISubject { void Attach(IObserver observer); void Detach(IObserver observer); } public class NewsAgency : ISubject { public string NewsHeadline; public Genre State; public void setNewsHeadline(Genre state, string news) { State = state; NewsHeadline = news; } private List<IObserver> Observers = new List<IObserver>(); // // // public void Detach(IObserver observer) { this.Observers.Remove(observer); } public void Notify() { foreach (var observer in Observers) { observer.Update(this); } } public void Attach(IObserver observer) { if (observer == null) throw new ArgumentNullException("Error while attaching subscriber"); Observers.Add(observer); } } class DailyEconomy : IObserver { public void Update(ISubject subject) { if ((subject as NewsAgency).State == Genre.Economy) { Console.WriteLine($"DailyEconomy publikuje artykuł \"{(subject as NewsAgency).NewsHeadline}\""); } } } class NewYorkTimes : IObserver { public void Update(ISubject subject) { Console.WriteLine($"NewYorkTimes publikuje artykuł \"{(subject as NewsAgency).NewsHeadline}\""); } } class NationalGeographic : IObserver { public void Update(ISubject subject) { if ((subject as NewsAgency).State == Genre.Science) { Console.WriteLine($"NationalGeographic publikuje artykuł \"{(subject as NewsAgency).NewsHeadline}\""); } } } // // // // class Program { static void Main(string[] args) { var newsAgency = new NewsAgency(); var dailyEconomy = new DailyEconomy(); var newYork = new NewYorkTimes(); var nationalGeographic = new NationalGeographic(); // // // newsAgency.setNewsHeadline(Genre.Economy, "USA is going bancrupt!"); newsAgency.Attach(dailyEconomy); newsAgency.Attach(newYork); newsAgency.Attach(nationalGeographic); newsAgency.Notify(); newsAgency.setNewsHeadline(Genre.Science, "Life on Alpha Centauri"); newsAgency.Notify(); newsAgency.setNewsHeadline(Genre.Sport, "Adam Małysz is the greatest sportsman in the history of mankind"); newsAgency.Notify(); newsAgency.setNewsHeadline(Genre.Economy, "CD Project RED value has grown by 500% in 2020"); newsAgency.Notify(); newsAgency.setNewsHeadline(Genre.Science, "Kirkendall effect causing airplanes' engine deteriorate"); newsAgency.Notify(); newsAgency.Detach(dailyEconomy); newsAgency.setNewsHeadline(Genre.Economy, "Texas is going bancrupt!"); newsAgency.Notify(); // // // //detach? // // } } }
Editor is loading...
Leave a Comment