Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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);
- void Notify();
- }
- public class NewsAgency : ISubject
- {
- public string NewsHeadline;
- public Genre State;
- public void SetNewsHeadline(Genre state, string news)
- {
- this.State = state;
- this.NewsHeadline = news;
- this.Notify();
- }
- private readonly List<IObserver> Observers = new List<IObserver>();
- public void Detach(IObserver observer)
- {
- this.Observers.Remove(observer);
- }
- public void Attach(IObserver observer)
- {
- this.Observers.Add(observer);
- }
- public void Notify()
- {
- foreach (var observer in Observers)
- {
- observer.Update(this);
- }
- }
- }
- 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()
- {
- var newsAgency = new NewsAgency();
- var dailyEconomy = new DailyEconomy();
- var newYork = new NewYorkTimes();
- var nationalGeographic = new NationalGeographic();
- newsAgency.Attach(dailyEconomy);
- newsAgency.Attach(newYork);
- newsAgency.Attach(nationalGeographic);
- newsAgency.SetNewsHeadline(Genre.Economy, "USA is going bancrupt!");
- newsAgency.SetNewsHeadline(Genre.Science, "Life on Alpha Centauri");
- newsAgency.SetNewsHeadline(Genre.Sport, "Adam Małysz is the greatest sportsman in the history of mankind");
- newsAgency.SetNewsHeadline(Genre.Economy, "CD Project RED value has grown by 500% in 2020");
- newsAgency.SetNewsHeadline(Genre.Science, "Kirkendall effect causing airplanes' engine deteriorate");
- newsAgency.Detach(dailyEconomy);
- newsAgency.SetNewsHeadline(Genre.Economy, "Texas is going bancrupt!");
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement