天天看點

#yyds幹貨盤點# 前端歌謠的刷題之路-第一百五十四題-觀察者模式

 前言

我是歌謠 我有個兄弟 巅峰的時候排名c站總榜19 叫前端小歌謠 曾經我花了三年的時間創作了他 現在我要用五年的時間超越他 今天又是接近兄弟的一天人生難免坎坷 大不了從頭再來 歌謠的意志是永恒的 放棄很容易 但是堅持一定很酷 本題目源自于牛客網 微信公衆号前端小歌謠

題目

請補全JavaScript代碼,完成"Observer"、"Observerd"類實作觀察者模式。要求如下:

1. 被觀察者構造函數需要包含"name"屬性和"state"屬性且"state"初始值為"走路"

2. 被觀察者建立"setObserver"函數用于儲存觀察者們

3. 被觀察者建立"setState"函數用于設定該觀察者"state"并且通知所有觀察者

4. 觀察者建立"update"函數用于被觀察者進行消息通知,該函數需要列印(console.log)資料,資料格式為:小明正在走路。其中"小明"為被觀察者的"name"屬性,"走路"為被觀察者的"state"屬性

注意:

1. "Observer"為觀察者,"Observerd"為被觀察者

#yyds幹貨盤點# 前端歌謠的刷題之路-第一百五十四題-觀察者模式
#yyds幹貨盤點# 前端歌謠的刷題之路-第一百五十四題-觀察者模式

​編輯

 核心代碼

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>觀察者模式</title>
</head>

<body>
  <!-- 
    被觀察者構造函數聲明三個屬性分别為"name"用于儲存被觀察者姓名、"state"用于儲存被觀察者狀态、"observers"用于儲存觀察者們
    被觀察者建立"setObserver"函數,該函數通過數組的push函數将觀察者參數傳入"observers"數組中
    被觀察者建立"setState"函數,該函數首先通過參數修改被觀察者的"state"屬性,然後通過周遊"observers"數組分别調用各個觀察者的"update"函數并且将該被觀察者作為參數傳入
    觀察者建立"update"函數,用于列印資訊
 -->
  <script type="text/javascript">
    // 補全代碼
    class Observerd {
      constructor(name) {
        this.name = name
        this.state = '走路'
        this.observers = []
      }
      setObserver(observer) {
        this.observers.push(observer)
      }
      setState(state) {
        this.state = state
        this.observers.forEach(observer => observer.update(this))
      }
    }
    class Observer {
      constructor() {

      }
      update(observerd) {
        console.log(observerd.name + '正在' + observerd.state)
      }
    }
  </script>
</body>

</html>