1. 程式人生 > >【javascript】javascript設計模式之單例模式

【javascript】javascript設計模式之單例模式

函數 設置 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設計模式之單例模式