guanchazhe_jieko.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApp1
  7. {
  8. internal class guanchazhe_jieko
  9. {
  10. // 主题接口
  11. public interface ISubject
  12. {
  13. void RegisterObserver(IObserver observer);
  14. void RemoveObserver(IObserver observer);
  15. void NotifyObservers();
  16. string GetState();
  17. void SetState(string state);
  18. }
  19. // 观察者接口
  20. public interface IObserver
  21. {
  22. void Update(string message);
  23. }
  24. // 主题类
  25. public class ConcreteSubject : ISubject
  26. {
  27. private readonly List<IObserver> _observers = new List<IObserver>();
  28. private string _subjectState;
  29. public void RegisterObserver(IObserver observer)
  30. {
  31. _observers.Add(observer);
  32. }
  33. public void RemoveObserver(IObserver observer)
  34. {
  35. _observers.Remove(observer);
  36. }
  37. public void NotifyObservers()
  38. {
  39. foreach (var observer in _observers)
  40. {
  41. observer.Update(_subjectState);
  42. }
  43. }
  44. // 主题状态的设置和获取方法
  45. public string GetState()
  46. {
  47. return _subjectState;
  48. }
  49. public void SetState(string state)
  50. {
  51. _subjectState = state;
  52. }
  53. }
  54. // 观察者类
  55. public class ConcreteObserver : IObserver
  56. {
  57. private string _name;
  58. private string _observerState;
  59. public ConcreteObserver(string name)
  60. {
  61. this._name = name;
  62. }
  63. public void Update(string message)
  64. {
  65. _observerState = message;
  66. Console.WriteLine("Observer {0} received message: {1}", _name, _observerState);
  67. }
  68. }
  69. }
  70. }