在了解單例模式
之前,我們要先搞懂什麼是設計模式
:
比較官方的設計模式定義:我們在日常的開發當中,都或多或少地接觸了設計模式,但是很多時候不知道自己使用了哪種設計模式或者說該使用何種設計模式。其實我個人覺得哈,咱們就是在物件導向軟體設計過程中針對特定問題的簡潔而優雅的解決方案。
當然說白了就是:
設計模式對某個特定場景下對某種問題的解決方案。
所以,我們在合適的場景下可能會條件反射一樣自然而然想到符合這種場景的設計模式。
所有的設計模式的共同目標都是:
高內聚,低耦合
。
用不著糾結該用什麼樣的設計模式,因為有的時候在不經意間我們就已經使用了設計模式當中的一種。
-----------------分割線-----------------
好,下面我將結合一些例項,說一下我對單例模式的了解:
1、首先我們要大概的知道單例模式的概念
:
2、適用場景:
①如果我們希望p1,p2是完全相等的應該怎樣做?
傳統**如下:
functionfn(
);} fn.obj.sayhello =
"hello"
;return fn.obj;
}let p1 =
newfn()
;let p2 =
newfn()
; console.
log(p1 === p2)
;// true
可以在建構函式上建立乙個instance變數來儲存例項。如果例項存在則直接返回,如果不存在則建立乙個儲存在instance屬性中並返回。
// 首先封裝乙個建構函式
function
person()
// 封裝乙個單例模式的呼叫方式
let f =
(function()
return instance;}}
)();
let p1 =f(
);let p2 =f(
);console.
log(p1)
;// person
console.
log(p2)
;// person
console.
log(p1 === p2)
;// true
②我們平時在使用的過程中,肯定還會用到dom節點,也就是在下面的**中的init函式中去建立dom元素,但是這樣操作就會導致每次建立例項的時候都建立一次dom節點,這顯然是不正確的,因此,我們可以把dom的建立過程提到函式頂部,也就是程式一開始直接建立乙個dom節點,僅在init中去修改裡面的內容。這樣是不是就省了好多事。
function
msg(
)msg.prototype.
init
=function
(str)
let singlecase =
(function()
instance.
init
(text)
;return instance;}}
)();
let m1 =
singlecase
("hello");
let m2 =
singlecase
("world");
console.
log(m1===m2)
;// true
注意:當在乙個命名空間a中呼叫別的命名空間b中的函式的時候,呼叫方法為b.functionname();
當在乙個命名空間a中呼叫自己空間中的函式的時候,呼叫方法為 this.functionname()。
JS設計模式之單例模式
保證乙個類僅有乙個例項,並且提供乙個訪問它的全域性訪問點。如果例項不存在,則生成乙個例項,如果例項存在,則返回這個例項 var singleton function return return instance console.log singleton.getinstance foo consol...
JS設計模式之 單例模式
設計模式,常見的模式有單例模式,模式等,設計模式的合理運用不僅使 結構更加清晰,也便於後期的維護與重構。然而在日常的學習中,我們卻在不經意間使用了單例模式,but總是容易忽視,額。應該是我,不是我們。什麼是單例模式?限制乙個類僅有乙個例項化物件,並提供乙個訪問它的全域性訪問點。經典的實現方式是 建立...
JS設計模式之單例模式
單例模式的定義是 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。比如說購物車,在乙個 中,我們只需要乙個購物車,購物車在整個 中是唯一的,不需要多次建立,即使多次點選購物車按鈕,也不會生成多個購物車。閉包預警 有對閉包不明白的同學,可以看這裡。var singleton function ...