<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 迪米特原則 最少知識原則 單一職責原則說道:一個對象(方法)只做一件事;那代表著我們要創建更多的對象(方法)來分解一個之前比較大的對象(方法),那分解之后,對象(方法)是小了,好維護好擴展了,但是對象之間的聯系卻越來越多了,有兩個對象非常耦合,怎么辦 **【定義】** > **最**少知識原則要求我們在設計程序時,應當盡量減少對象之間的交互。如果兩個對象之間不 必彼此直接通信,那么這兩個對象就不要發生直接的相互聯系。常見的做法是引入一個第三者對 象,來承擔這些對象之間的通信作用。如果一些對象需要向另一些對象發起請求,可以通過第三 者對象來轉發這些請求 **【優點】** 減少或消除對象之間的耦合程度,提高復用性 **【缺點】** 需要封裝對象或者引入一個第三者對象來處理兩者之間的聯系,有時候第三者對象會復雜到難以維護 **【應用】** 封裝是廣義上最少知識原則的一種體現,封裝的好處是隱藏內部屬性、方法、實現細節,只拋出指定數據或對象給外界,外界使用封裝對象的對象越少說明聯系就越少。另外一種就是兩個對象很耦合的時候通過引入第三者來處理兩個對象之間的關系 這個demo是我自己編的,大概的意思是一個班級有n個學生,學生有自己的年齡,年齡相等的學生可以做朋友(emmmm,原諒我奇葩的腦洞,還好我沒說性別一樣的才能做朋友,不然要被在座的各位打屎),如果每次新進來一個學生,都要全班一個學生一個學生的問年齡,那太麻煩了,如果老師入學的時候把學生按年齡分批了,那是不是很好找到,這個按年齡分批次就是引入的第三者來處理這個問題,我不知道夠不夠形象啊,但是書上的外觀模式的代碼舉例真的辣雞,不夠形象?? ~~~ let nameList = [{ name: 'eason', age: 1 }, { name: 'taylor', age: 3 }, { name: 'jack', age: 2 }, { name: 'yu', age: 1 }, { name: 'xixi', age: 3 }] let state = {} let People = (name, age) => { let that = {} that.name = name that.age = age that.friends = [] return that } // bad for (let n of nameList) { state[n.name] = new People(n.name, n.age) } let jay = new People('jay', 3) let syz = new People('syz', 2) let keys = Object.keys(state) for (let k of keys) { if (state[k].age === jay.age) { jay.friends.push(state[k].name) } if (state[k].age === syz.age) { syz.friends.push(state[k].name) } } console.log('jay-friends', jay.friends) // ["jay", "taylor", "xixi"] //good let ageList = [] let ageMap = {} for (let n of nameList) { state[n.name] = new People(n.name, n.age) if (ageList.indexOf(n.age) < 0) { ageList.push(n.age) ageMap[n.age] = [] ageMap[n.age].push(n.name) } else { ageMap[n.age].push(n.name) } } let addPeople = (name, age) => { ageMap[age] = ageMap[age] || [] ageMap[age].push(name) return new People(name, age) } let jay = addPeople('jay', 3) let syz = addPeople('syz', 2) console.log('jay-friends', ageMap[jay.age]) //["taylor", "xixi", "jay"] console.log('syz-friends', ageMap[syz.age]) //["jack", "syz"] ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看