Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace WzorceProjektowe
  5. {
  6. public enum Genre
  7. {
  8. Sport,
  9. Politics,
  10. Economy,
  11. Science
  12. }
  13. public interface IObserver
  14. {
  15. void Update(ISubject subject);
  16. }
  17. public interface ISubject
  18. {
  19. void Attach(IObserver observer);
  20. void Detach(IObserver observer);
  21. void Notify();
  22. }
  23.  
  24. public class NewsAgency : ISubject
  25. {
  26. public string NewsHeadline;
  27. public Genre State;
  28. public void SetNewsHeadline(Genre state, string news)
  29. {
  30. this.State = state;
  31. this.NewsHeadline = news;
  32. this.Notify();
  33. }
  34. private readonly List<IObserver> Observers = new List<IObserver>();
  35. public void Detach(IObserver observer)
  36. {
  37. this.Observers.Remove(observer);
  38. }
  39. public void Attach(IObserver observer)
  40. {
  41. this.Observers.Add(observer);
  42. }
  43. public void Notify()
  44. {
  45. foreach (var observer in Observers)
  46. {
  47. observer.Update(this);
  48. }
  49. }
  50. }
  51. class DailyEconomy : IObserver
  52. {
  53. public void Update(ISubject subject)
  54. {
  55. if ((subject as NewsAgency).State == Genre.Economy)
  56. {
  57. Console.WriteLine($"DailyEconomy publikuje artykuł \"{(subject as NewsAgency).NewsHeadline}\"");
  58. }
  59. }
  60. }
  61. class NewYorkTimes : IObserver
  62. {
  63. public void Update(ISubject subject)
  64. {
  65. Console.WriteLine($"NewYorkTimes publikuje artykuł \"{(subject as NewsAgency).NewsHeadline}\"");
  66. }
  67. }
  68. class NationalGeographic : IObserver
  69. {
  70. public void Update(ISubject subject)
  71. {
  72. if ((subject as NewsAgency).State == Genre.Science)
  73. {
  74. Console.WriteLine($"NationalGeographic publikuje artykuł \"{(subject as NewsAgency).NewsHeadline}\"");
  75. }
  76. }
  77. }
  78.  
  79. class Program
  80. {
  81. static void Main()
  82. {
  83. var newsAgency = new NewsAgency();
  84. var dailyEconomy = new DailyEconomy();
  85. var newYork = new NewYorkTimes();
  86. var nationalGeographic = new NationalGeographic();
  87. newsAgency.Attach(dailyEconomy);
  88. newsAgency.Attach(newYork);
  89. newsAgency.Attach(nationalGeographic);
  90. newsAgency.SetNewsHeadline(Genre.Economy, "USA is going bancrupt!");
  91. newsAgency.SetNewsHeadline(Genre.Science, "Life on Alpha Centauri");
  92. newsAgency.SetNewsHeadline(Genre.Sport, "Adam Małysz is the greatest sportsman in the history of mankind");
  93. newsAgency.SetNewsHeadline(Genre.Economy, "CD Project RED value has grown by 500% in 2020");
  94. newsAgency.SetNewsHeadline(Genre.Science, "Kirkendall effect causing airplanes' engine deteriorate");
  95. newsAgency.Detach(dailyEconomy);
  96. newsAgency.SetNewsHeadline(Genre.Economy, "Texas is going bancrupt!");
  97. Console.ReadKey();
  98. }
  99. }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement