1. // 创建一个发布者类
    2. class Publisher {
    3. constructor() {
    4. this.observers = [];
    5. console.log("init");
    6. }
    7. // 增加订阅者
    8. add(observer) {
    9. console.log("add");
    10. this.observers.push(observer);
    11. }
    12. // 移除订阅者
    13. remove(observer) {
    14. console.log("remove");
    15. this.observers.forEach((item, index) => {
    16. if (item === observer) {
    17. this.observers.splice();
    18. }
    19. });
    20. }
    21. // 通知所有订阅者
    22. notify() {
    23. console.log("notify");
    24. this.observers.forEach((observer) => {
    25. observer.update(this);
    26. });
    27. }
    28. }
    29. // 创建一个订阅者类
    30. class Observer {
    31. constructor() {
    32. console.log("observer");
    33. }
    34. update() {
    35. console.log("update");
    36. }
    37. }
    38. class PrdPublisher extends Publisher {
    39. constructor() {
    40. super();
    41. this.prdState = null;
    42. this.observers = [];
    43. console.log("PrdPublisher init");
    44. }
    45. // 该方法用于获取当前的prdState
    46. getState() {
    47. console.log("getState");
    48. return this.prdState;
    49. }
    50. // 改变prdState的状态
    51. setState(state) {
    52. console.log("set");
    53. this.prdState = state;
    54. this.notify();
    55. }
    56. }
    57. class DeveloperObserver extends Observer {
    58. constructor() {
    59. super();
    60. this.prdState = {};
    61. console.log("developer init");
    62. }
    63. // 重写一个update的方法
    64. update(publisher) {
    65. console.log("new update");
    66. // 更新需求文档
    67. this.prdState = publisher.getState();
    68. // 开始工作
    69. this.work();
    70. }
    71. // work 开始搬砖
    72. work() {
    73. const prd = this.prdState;
    74. console.log("996 begins...", prd);
    75. }
    76. }
    77. const pika = new DeveloperObserver()
    78. const A = new DeveloperObserver()
    79. const B = new DeveloperObserver()
    80. const xx = new PrdPublisher()
    81. const prd = {
    82. name: '1231'
    83. }
    84. xx.add(pika)
    85. xx.add(A)
    86. xx.add(B)
    87. xx.setState(prd)