guanchazhe_jieko.cs 2.1 KB

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