<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                >[success] # 前端角度思考享元模式 ~~~ 1.書中給出一個場景,有一個服裝場,生產50件男士衣服和50件女士衣服,現在為了 推銷產品需要拍照做廣告,站在極端情況下50個男模特和50個女模特都需要穿衣服來 拍照 ~~~ >[danger] ##### 轉成代碼 ~~~ // 創建一個模特 性別 和穿的衣服兩個屬性 var Model = function (sex, clothes) { this.sex = sex this. clothes = clothes } Model.prototype.takePhoto = function () { console.log('sex='+this.sex + ' clothes=' + this. clothes) } // 創建五十個男模特穿衣服 for(var i=1;i<=50;i++){ var maleModel = new Model('male','clothes' + i) // 拍照 maleModel.takePhoto() } // 創建五十個女模特穿衣服 for(var i=1;i<=50;i++){ var maleModel = new Model('female','clothes' + i) // 拍照 maleModel.takePhoto() } ~~~ >[danger] ##### 現在的問題 ~~~ 1.如果后續工廠擴張衣服生產越來越多,那是否就會產生一個問題需要創建的模特對象 也會越來越多,隨著對象增多,內存的占越來越多就會出現程序崩潰的問題 ~~~ >[danger] ##### 解決方法 ~~~ 1.只創建一個男模一個女模,他倆去穿這不同款式的衣服去拍照 2.下面的代碼只是分別創建了男女模特兩個對象,也實現了100件衣服的拍照功能 ~~~ ~~~ // 創建一個模特 性別 和穿的衣服兩個屬性 var Model = function (sex) { this.sex = sex } Model.prototype.takePhoto = function () { console.log('sex='+this.sex + ' clothes=' + this. clothes) } // 創建一個男模 var maleModel = new Model('male') // 創建一個女模 var femaleModel = new Model('female') // 男模特穿衣服拍照 for(var i=1;i<=50;i++){ maleModel.clothes = 'clothes'+i maleModel.takePhoto() } // 女模特 for(var i=1;i<=50;i++){ femaleModel.clothes = 'clothes'+i femaleModel.takePhoto() } ~~~ >[success] # 享元的概念 >[danger] ##### 書中解釋概括 ~~~ 1.享元模式要求將'對象的屬性'劃分為'內部狀態'與'外部狀態'(狀態在這里通常指屬性) 2.享元模式的目標是盡量減少共享對象的數量 3.劃分內部狀態和外部狀態方法(書中給了四條建議): 3.1.內部狀態存儲于對象內部。 3.2.內部狀態可以被一些對象共享。 3.3.內部狀態獨立于具體的場景,通常不會改變。 3.4.外部狀態取決于具體的場景,并根據場景而變化,外部狀態不能被共享。 4.把所有內部狀態相同的對象都指定為同一個共享的對象。而外部狀態 可以從對象身 上剝離出來,并儲存在外部。 5.通過時間換空間的思路:剝離了外部狀態的對象成為共享對象,外部狀態在必要時被傳 入共享對象來組裝成一個完整的對象,外部狀態成為一個完整對象的過程需要花費一定的 時間,但卻可以大大減少系統中的對象數量,相比之下,這點時間或許是微不足道的。因此 ,享元模式是一種用'時間換空間'的優化模式。 ~~~ >[danger] ##### 根據解釋再對案例分析帶入 ~~~ 1.性別是'內部狀態',衣服是'外部狀態',通過區分兩種狀態,減少了'系統中的對象數量'。 2.'對象的個數由內部對象組合數決定',內部狀態有多少種組合,系統中便最多存在多少 個對象,因為性別 通常只有男女兩種,所以該內衣廠商最多只需要 2 個對象。 3.'內部對象':可以被對象共享的屬性通常被劃分為內部狀態,如同不管什么樣式的衣服, 都可以按照性別不同,穿在同一個男模特或者女模特身上,模特的性別就可以作為內部狀 態儲存在共享對象的內部。 4.'外部對象':取決于具體的場景,并根據場景而變化,就像例子中每件衣服都是不同的, 它們不能被一些對象共享,因此只能被劃分為外部狀態。 ~~~ >[danger] ##### 其他文章的總結 * 參考了文章 [私塾國際學府·技術團隊](http://techblog.sishuxuefu.com/atricle.html?5bcf34ef808ca40072a6fec2) ~~~ 1.運用共享技術有效地支持大量細粒度的對象。 2.緩存的是對象的實例,實例存放的是屬性,如果這些屬性不斷改變,那么緩存中的數據也 必須跟著改變,那緩存就沒有意義了,正是如此也可以理解要把'不變的屬性作為內部屬性', '改變的部分作為外部狀態對外暴露,讓外界去改變成為外部屬性' ~~~ >[danger] ##### 創建享元需要的具體實現思路 ~~~ 1.書中對之前的衣服代碼進行的'分析': 1.1.通過構造函數顯式 new 出了男女兩個 model 對象,在其他系統中,也許并不是一開始 就需要所有的共享對象。 1.2.給 model 對象手動設置了 clothes外部狀態,在更復雜的系統中,這不是一個最好的方 式,因為外部狀態可能會相當復雜,它們與共享對象的聯系會變得困難。 2.'解決方案': 2.1.通過一個對象工廠來解決第一個問題,只有當某種共享對象被真正需要時,它才從工廠 中被創建出來。 2.2.第二個問題,可以用一個管理器來記錄對象相關的外部狀態,使這些外部狀 態通過某個鉤子和共享對象聯系起來。 ~~~
                  <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>

                              哎呀哎呀视频在线观看