【javascript】javascript設計模式之單例模式
阿新 • • 發佈:2018-02-14
函數 設置 tin 私有 資源 公有 key fun 初始化
單例模式:
定義:單例模式之所以這麽叫,是因為它限制一個類只能有一個實例化對象。
實現方法:判斷實例是否存在,如果存在則直接返回,如果不存在就創建了再返回。(確保一個類只有一個實例對象)
特點: 命名空間提供者,從全局命名空間裏提供一個唯一的訪問點來訪問該對象
實現單例的方式
一丶對象字面量
var hero = {
name : "timo"
sex : "male"
method: function(){
console.log("提莫隊長正在送命")
}
}
二丶添加私有成員和方法,然後使用閉包在內部封裝這些變量
var hero = function(){
/*私有變量和方法*/
var word = ‘提莫隊長正在送命‘
function tell(){
console.log(word)
}
公有變量和方法
return{
told: function(){
tell();
},
dead: "Public string"
}
}
var hero = hero()
hero.told() //隊長正在送命
console.log(hero.dead) //Public string
三丶構造函數初始化=>為了節約資源
var timo = (function(){
var inittimo;
function init(){
/*定義單例*/
return {
dead: function(){
console.log("Public dead")
}
word: "提莫隊長正在送命"
}
}
return {
getinit: function(){
if(!inittimo){
inittimo = init()
}
return inittimo;
}
}
})();
/*調用公有的方法來獲取實例*/
單例模式的使用場景
系統間各種模式的通信協調上
var SingletonTester = (function () {
//參數:傳遞給單例的一個參數集合
function Singleton(args) {
//設置args變量為接收的參數或者為空(如果沒有提供的話)
var args = args || {};
//設置name參數
this.name = ‘SingletonTester‘;
//設置pointX的值
this.pointX = args.pointX || 6; //從接收的參數裏獲取,或者設置為默認值
//設置pointY的值
this.pointY = args.pointY || 10;
}
//實例容器
var instance;
var _static = {
name: ‘SingletonTester‘,
//獲取實例的方法
//返回Singleton的實例
getInstance: function (args) {
if (instance === undefined) {
instance = new Singleton(args);
}
return instance;
}
};
return _static;
})();
var singletonTest = SingletonTester.getInstance({ pointX: 5 });
console.log(singletonTest.pointX); // 輸出 5
【javascript】javascript設計模式之單例模式