国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

聽(tīng)飛狐聊JavaScript設(shè)計(jì)模式系列06

hiYoHoo / 1803人閱讀

本回內(nèi)容介紹

上一回聊到JS中模擬接口,裝飾者模式,摻元類,分析了backbone的繼承源碼,感覺(jué)還好吧!

介一回,偶們來(lái)聊一下在JS單例模式(singleton),單例模式其實(shí)運(yùn)用很廣泛,比如:jquery,AngularJS,underscore吖蝦米的都是單例模式,來(lái)吧,直接開(kāi)始咯:

1. 單例模式

保證一個(gè)類只有一個(gè)實(shí)例,從全局命名空間里提供一個(gè)唯一的訪問(wèn)點(diǎn)來(lái)訪問(wèn)該對(duì)象。其實(shí)之前寫過(guò)的對(duì)象字面量也是一種簡(jiǎn)單單例,如下:

    var Singleton = {
        name: "飛狐",
        method: function () {
            return "hello world";
        }
    };
    alert(Singleton.method());    // 返回hello world

這就是一個(gè)簡(jiǎn)單單例了,應(yīng)該很多盆友已經(jīng)看出來(lái)了,沒(méi)有作用域,如果要擴(kuò)展私有屬性和方法的話,那么就可以靠閉包來(lái)實(shí)現(xiàn)。

2. 閉包單例模式

顧名思義要用到閉包,作為返回實(shí)例對(duì)象,如下:

    var Singleton = (function(){
        var name = "飛狐";    // 私有屬性
        var nickname = "帥狐";
        var showNickname = function(){    // 私有方法
            return nickname;
        }
        return {    // 返回一個(gè)對(duì)象
            name:name,    // 將私有屬性公開(kāi)
            nickName: function(){    // 在公開(kāi)的方法中返回私有方法
                return showNickname();
            }
        }
    })();
    alert(Singleton.name);    // 飛狐 
    alert(Singleton.nickName());    // 帥狐 

這里我們接著上邊兒簡(jiǎn)單單例的例子來(lái),稍微的改一下,改成閉包之后,就數(shù)據(jù)保證了不受外界干擾了。

3. 惰性單例模式

惰性單例就是只有在使用的時(shí)候才初始化,如下:

    var Singleton = (function(){
        var uniq;    // 私有變量,用來(lái)存放返回實(shí)例化對(duì)象的容器
        function init(){    // 初始化方法    
            var buildeList = function(){    // 私有方法
                // 下面這一堆就是創(chuàng)建一個(gè)有序列表,含有5個(gè)li
                var root = document.createElement("ol");
                document.body.appendChild(root);
                for(var i=0;i<5;i++){
                    var a = document.createElement("a");
                    a.innerHTML = "帥狐";
                    var li = document.createElement("li");
                    li.appendChild(a);
                    root.appendChild(li);
                }
            }
            
            return {    // 一樣的閉包,暴露共有方法
                method:function(){
                    return buildeList();
                }
            };
        }
        
        return {
            // 這里就是實(shí)例化對(duì)象了
            getInstance:function(){
                // 這里的uniq為true的時(shí)候,或者可以寫成 typeof uniq==="undefined"
                if(!uniq){
                    // 創(chuàng)建單例實(shí)例
                    uniq = init();
                }
                return uniq;
            }
        };
    })();
    
    Singleton.getInstance().method();    // 返回1.帥狐2.帥狐3.帥狐4.帥狐5.帥狐

這個(gè)例子就是惰性單例了,也就是說(shuō)只有在用的時(shí)候才會(huì)去初始化方法,這樣可以更省資源。

4. 分支單例模式

分支單例就很簡(jiǎn)單了,就是做程序分支的判斷,利用分支來(lái)返回相應(yīng)的實(shí)例,經(jīng)常用于瀏覽器檢測(cè),直接看代碼吧,如下:

    var ua  = window.navigator.userAgent.toLocaleLowerCase();
    var matchedRE = /iphone|android|symbianos|windowssphone/g;
    var Singleton = (function() {
          var webUrl = "web端url";
          var mobileUrl = "移動(dòng)端url";
          return (matchedRE.test(ua))?mobileUrl:webUrl;
    })();
    // 如果是pc端返回就是web端url,如果是移動(dòng)端就返回移動(dòng)端url
    alert(Singleton); 

這個(gè)例子就是分支單例了,比較簡(jiǎn)單,這個(gè)例子也是模擬京東目前判斷訪問(wèn)設(shè)備的代碼。


裝個(gè)逼再說(shuō)。剛看到一新聞,韓雪發(fā)微博稱,因?yàn)樽约盒薷牡谋驹绿撞停显铝髁烤颓辶懔耍⒎Q:“我改這個(gè)月的和上個(gè)月有什么關(guān)系嗎?我付了錢的,多余的流量憑什么你說(shuō)清零就清零呢?這不是霸王條款嗎?”,女神都忍受不了了,哈哈~~

這一回講的內(nèi)容不多,就一個(gè)單例模式,
下面的內(nèi)容更簡(jiǎn)單,一道題。

5. 筆試題:判斷字符串中出現(xiàn)次數(shù)最多的字母,返回該字母及其出現(xiàn)次數(shù)
    function calculate(str){
        //命名一個(gè)變量放置字母出現(xiàn)的最高次數(shù)并初始化為0
        var maxLength = 0;
        //命名一個(gè)變量放置結(jié)果輸入 
        var result = "";
        //循環(huán)迭代開(kāi)始,并判斷字符串是否為空
        while(str != "" ){
            //將原始的字符串變量賦值給新變量
            var oldStr = str;
            //用字符串的substr的方法得到第一個(gè)字符(首字母)
            var getStr = str.substr(0,1);
            //執(zhí)行一次全局替換
            eval("str = str.replace(/"+getStr+"/g,"")");
            //判斷原始的字符串的長(zhǎng)度減去替代后字符串長(zhǎng)度是否大于之前出現(xiàn)的最大的字符串長(zhǎng)度
            if(oldStr.length-str.length > maxLength ) {
                //兩字符串長(zhǎng)度相減得到最大的字符串長(zhǎng)度
                maxLength = oldStr.length-str.length;
                //返回最大的字符串結(jié)果(字母、出現(xiàn)次數(shù))
                result = "出現(xiàn)最多的字母是:" + getStr + "------出現(xiàn)了" + maxLength + " 次。";
            }
        }
        return result;
    }
    var str ="adadfdfseffserfefsefseeffffftsdg";
    alert(calculate(str)); 

這個(gè)題基本上我都寫了注釋,難度適中,當(dāng)娛樂(lè)消遣。

這一回,主要聊了單例模式,應(yīng)該很好理解,難度不大。
下一回,咱主要聊一聊工廠模式。

話說(shuō),看完文章覺(jué)得ok,客觀點(diǎn)個(gè)贊唄,好東西多推薦推薦,讓大家都知道,嘿嘿,好像有點(diǎn)那啥賣瓜了...

注:此系飛狐原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/86126.html

相關(guān)文章

  • 聽(tīng)飛狐JavaScript設(shè)計(jì)模式系列02

    摘要:本回內(nèi)容介紹上一回聊到數(shù)據(jù)類型,簡(jiǎn)單的過(guò)了一遍,包括個(gè)數(shù)組新特性等,這一回來(lái)聊聊對(duì)象,結(jié)合數(shù)組來(lái)實(shí)戰(zhàn)一些例子,在做題中成長(zhǎng),記憶會(huì)更深刻,來(lái)吧,開(kāi)始咯創(chuàng)建實(shí)例的方式有兩種使用操作符后跟構(gòu)造函數(shù)飛狐使用對(duì)象字面量表示法飛狐也可以飛狐這種寫法與 本回內(nèi)容介紹 上一回聊到JS數(shù)據(jù)類型,簡(jiǎn)單的過(guò)了一遍,包括9個(gè)數(shù)組新特性等,這一回來(lái)聊聊Object對(duì)象,結(jié)合數(shù)組來(lái)實(shí)戰(zhàn)一些例子,在做題中成長(zhǎng),記...

    tangr206 評(píng)論0 收藏0
  • 聽(tīng)飛狐JavaScript設(shè)計(jì)模式系列11

    摘要:橋接模式之特權(quán)函數(shù)特權(quán)函數(shù),用一些具有特權(quán)的方法作為橋梁以便訪問(wèn)私有空間,可以回憶一下之前的系列。連續(xù)自然數(shù)分組,計(jì)算最多組的個(gè)數(shù)將至這個(gè)連續(xù)自然數(shù)分成組使每組相加的值相等。個(gè)數(shù)組中數(shù)字最多的一組有個(gè)此時(shí)的和為。 本回內(nèi)容介紹 上一回,聊了適配器模式,圖片預(yù)加載,介一回,聊橋接模式(Bridge),跟之前一樣,難度比較小,橋接模式將抽象部分與它的實(shí)現(xiàn)部分分離,通過(guò)橋接模式聯(lián)系彼此,同時(shí)...

    wanglu1209 評(píng)論0 收藏0
  • 聽(tīng)飛狐JavaScript設(shè)計(jì)模式系列10

    摘要:本回內(nèi)容介紹上一回,聊了代理模式,虛擬代理,圖片懶加載,介一回,也比較容易,適配器模式,用一個(gè)新的接口對(duì)現(xiàn)有類的接口進(jìn)行包裝,處理類與的不匹配。這一回,主要聊了適配器模式,圖片預(yù)加載,主要還是理解下一回,聊一聊橋接模式,順便做一做計(jì)算題。 本回內(nèi)容介紹 上一回,聊了代理模式,虛擬代理,圖片懶加載,介一回,也比較容易,適配器模式(Adapter),用一個(gè)新的接口對(duì)現(xiàn)有類的接口進(jìn)行包裝,處...

    yexiaobai 評(píng)論0 收藏0
  • 聽(tīng)飛狐JavaScript設(shè)計(jì)模式系列14

    摘要:本回內(nèi)容介紹上一回,聊了聊狀態(tài)模式,并介紹了一下介一回,聊鏈?zhǔn)骄幊蹋M一下,再模擬一下封裝一個(gè)庫(kù)。這一回,主要聊了鏈?zhǔn)秸{(diào)用,模擬了,尤其是,希望大家能喜歡這次代碼分享。下一回,聊一聊的策略模式。 本回內(nèi)容介紹 上一回,聊了聊狀態(tài)模式(State),并介紹了一下vue.js;介一回,聊鏈?zhǔn)骄幊蹋M一下jQuery,再模擬一下underscore.js,封裝一個(gè)庫(kù)。 1. 鏈?zhǔn)秸{(diào)用 (...

    fox_soyoung 評(píng)論0 收藏0
  • 聽(tīng)飛狐JavaScript設(shè)計(jì)模式系列09

    摘要:說(shuō)白了,就是對(duì)訪問(wèn)進(jìn)行控制。這一回,主要聊了代理模式,虛擬代理,圖片懶加載,難度適中下一回,聊一下適配器模式,難度也比較小。 本回內(nèi)容介紹 上一回,聊了門面模式,DOM2級(jí)事件,事件委托,介一回,也比較容易,代理模式(proxy),代理對(duì)象控制對(duì)本體對(duì)象的訪問(wèn),實(shí)現(xiàn)了同樣的接口,并且會(huì)把任何方法的調(diào)用傳遞到本體對(duì)象。說(shuō)白了,就是對(duì)訪問(wèn)進(jìn)行控制。直接上代碼,走你: 1.代理模式 代理也是...

    張春雷 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<