OOP | 單例設(shè)計(jì)模式和工廠設(shè)計(jì)模式

文 / 景朝霞
來(lái)源公號(hào) / 朝霞的光影筆記
ID / zhaoxiajingjing
圖 / 自己畫

????點(diǎn)個(gè)贊辱姨,讓我知道你來(lái)過(guò)~????


0 / 單例設(shè)計(jì)模式

假設(shè):你需要錄入兩個(gè)人的信息:李雷和韓梅梅柿菩。<i>不要問(wèn)我他們是誰(shuí)</i>

<i>我本來(lái)想舉個(gè)例子,叫"媽媽喊你去相親"雨涛。后來(lái)一想枢舶,換個(gè)例子吧懦胞,被媽媽說(shuō)也就算了,看個(gè)代碼還要被扎心凉泄,太可憐了吧</i>

在最開始學(xué)代碼時(shí)候躏尉,我可能會(huì)這樣寫▽

let name = '李雷';
let age = 26;
let sex = '男';
let name = '韓梅梅';
let age = 28;
let sex = '女';

but,如果要把這兩段代碼放在一個(gè)js文件里后众,肯定會(huì)沖突啊怎么辦胀糜?分個(gè)組吧:

let person1 = {
    name:'李雷',
    age:26,
    sex:'男'
};
let person2 = {
    name:'韓梅梅',
    age:28,
    sex:'女'
};

<i>△ 這樣把信息分組歸類了</i>

person1person2是一個(gè)對(duì)象,也叫命名空間蒂誉,可以減少全局變量的污染教藻。

以上的person1person2也是單例設(shè)計(jì)模式(singleton pattern),即:只有一個(gè)實(shí)例的對(duì)象右锨。

在JS中怖竭,以對(duì)象字面量的方式和構(gòu)造函數(shù)模式是可以創(chuàng)建單例對(duì)象的。

單例設(shè)計(jì)模式:把描述事務(wù)的信息放到一個(gè)命名空間中進(jìn)行歸類陡蝇,防止全局變量污染

高級(jí)單例模式:你在開發(fā)中也經(jīng)常用痊臭,比如:公共模塊都寫在utils里面、頁(yè)面模塊單獨(dú)寫在一個(gè)JS文件里面

let utils = (function (){
    function deepCopy(){
        //.....CODE
    }
    function addHandler(){
        //....CODE
    }
    
    //...CODE
    
    return {
        deepCopy,
        addHandler
    };
})();

<i>△ 高級(jí)單例模式</i>

高級(jí)單例模式使用閉包的保護(hù)機(jī)制登夫,讓里面的代碼不受外界的干擾广匙。

函數(shù)執(zhí)行會(huì)形成一個(gè)全新的私有作用域,保護(hù)里面的代碼不受到外界的干擾恼策,這種保護(hù)機(jī)制就是閉包鸦致。閉包有兩個(gè)作用:保護(hù)和保存。<i>傳送門:圖解 | 理解閉包</i>

1 / 工廠模式

寫一兩個(gè)人的信息好弄涣楷,如果班里有30個(gè)人分唾,這樣一個(gè)個(gè)寫得累蒙圈了,而且會(huì)產(chǎn)生大量的重復(fù)代碼狮斗。

于是绽乔,可以造一個(gè)工廠出來(lái),批量可以把屬性都造出來(lái):

function person(name, age, sex){
    let person = {};
    
    person.name = name;
    person.age = age;
    person.sex = sex;
    
    return person;
}

let p1 = person('李雷', 26, '男');
let p2 = person('韓梅梅', 28, '女');
let p3 = person('莉莉', 26, '女');
//....余下的人信息

<i>△ 在單例的基礎(chǔ)上可以批量產(chǎn)出屬性碳褒,錄入信息了</i>

person就是個(gè)函數(shù)折砸,函數(shù)的意義在于什么?封裝

工廠模式:用函數(shù)來(lái)封裝以特定的方式來(lái)創(chuàng)建對(duì)象的細(xì)節(jié)沙峻。

(1)低耦合:可以減少一個(gè)個(gè)創(chuàng)建對(duì)象這些冗余的代碼

(2)高內(nèi)聚:提高代碼的重復(fù)使用率

2 / 面向?qū)ο?/h4>

<i>【PS:這個(gè)概念很大睦授,以我目前的知識(shí)儲(chǔ)備和文字表達(dá)能力可能說(shuō)的不是很清楚的,請(qǐng)見諒~】</i>

面向?qū)ο缶幊蹋∣bject Oriented Programming)

<i>還記得第一次面試摔寨,面試官問(wèn):什么是對(duì)象去枷?答:萬(wàn)物皆對(duì)象【PS:那時(shí)候真勇敢呀】</i>

公號(hào):朝霞的光影筆記

<i>△ 20.1_自然中的分類【PS:請(qǐng)?jiān)徫业纳镏R(shí)都還給老師了~~】</i>

"萬(wàn)物皆對(duì)象"中的"對(duì)象"本身只是一個(gè)泛指,任何事物都是一個(gè)對(duì)象,都可以是我們研究和面對(duì)的删顶。

把抽象的“對(duì)象”疗隶,按照特點(diǎn)來(lái)進(jìn)行分類(大類/小類)后,把共同的東西抽取出來(lái)翼闹,放到對(duì)應(yīng)的類別中斑鼻。即:“類”是對(duì)“對(duì)象”一種細(xì)分和公共部分的封裝。

通過(guò)類別派生出來(lái)的具體事務(wù)叫做:類的“實(shí)例”

實(shí)例既有屬于自己私有的東西猎荠,也會(huì)繼承各個(gè)類別中的公有信息

*面向?qū)ο缶幊?****需要掌握“對(duì)象”“類”“實(shí)例”之間的關(guān)系

ID:zhaoxiajingjing

<i>△ 20.2_畫個(gè)草圖</i>

比如坚弱,之前寫的一個(gè)選項(xiàng)卡:

    <div id="tabBox" class="tabBox">
        <ul id="navBox" class="navBox">
            <li class="active">代碼</li>
            <li>看書</li>
            <li>運(yùn)動(dòng)</li>
        </ul>
        <div class="active">
            讀讀代碼
            <p>公號(hào):朝霞的光影筆記</p>
            <p>ID:zhaoxiajingjing</p>
        </div>
        <div>
            書中自有顏如玉
            <p>公號(hào):朝霞的光影筆記</p>
            <p>ID:zhaoxiajingjing</p>
        </div>
        <div>
            瘦子生活模式,好好吃飯关摇,好好生活
            <p>公號(hào):朝霞的光影筆記</p>
            <p>ID:zhaoxiajingjing</p>
        </div>
    </div>
ID:zhaoxiajingjing

<i>△ 20.3_查看元素</i>


公號(hào):朝霞的光影筆記

<i>△ 20.4 研究一個(gè)實(shí)例</i>

研究一個(gè)實(shí)例:

1荒叶、私有的信息

2、所屬類公有的信息

3输虱、一層層從小類別一直找到Object為止些楣,研究屬性和方法

dir(tabBox)
|=>__proto__:HTMLDivElement.prototype
|=>__proto__:HTMLElement.prototype
|=>__proto__:Element.prototype
|=>__proto__:Node.prototype
|=>__proto__:EventTarget.prototype
|=>__proto__:Object.prototype

3 / 預(yù)告

請(qǐng)問(wèn):原型和原型鏈?zhǔn)巧叮?/p>

ID:zhaoxiajingjing
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宪睹,隨后出現(xiàn)的幾起案子愁茁,更是在濱河造成了極大的恐慌,老刑警劉巖亭病,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹅很,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡罪帖,警方通過(guò)查閱死者的電腦和手機(jī)促煮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)整袁,“玉大人菠齿,你說(shuō)我怎么就攤上這事∽迹” “怎么了绳匀?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)民珍。 經(jīng)常有香客問(wèn)我襟士,道長(zhǎng),這世上最難降的妖魔是什么嚷量? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮逆趣,結(jié)果婚禮上蝶溶,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好抖所,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布梨州。 她就那樣靜靜地躺著,像睡著了一般田轧。 火紅的嫁衣襯著肌膚如雪暴匠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天傻粘,我揣著相機(jī)與錄音每窖,去河邊找鬼。 笑死弦悉,一個(gè)胖子當(dāng)著我的面吹牛窒典,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稽莉,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼瀑志,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了污秆?” 一聲冷哼從身側(cè)響起劈猪,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎良拼,沒(méi)想到半個(gè)月后岸霹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡将饺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刮吧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掖蛤,到底是詐尸還是另有隱情杀捻,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布蚓庭,位于F島的核電站致讥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏器赞。R本人自食惡果不足惜垢袱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望港柜。 院中可真熱鬧请契,春花似錦咳榜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至氯夷,卻和暖如春臣樱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腮考。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工雇毫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秸仙。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓嘴拢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寂纪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子席吴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345