Advertisement
Guest User

Untitled

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