Javascript設計模式Revealing Module 揭示模式單例模式詳解

roc_guo發表於2022-09-06
1. Revealing Module 揭示模式

該模式能夠在私有範圍內簡單定義所有的函式和變數,並返回一個匿名物件, 它擁有指向私有函式的指標,該函式是他希望展示為公有的方法。

示例:

< script>
var myRevealingModule = function () {
    var privateVar = "Ren Cherry",
            publicVar = "Hey there";
    function privateFunction() {
            console.log("Name:"+privateVar);
    }
    function publicSetName(strName) {
            privateName = strName;
    }
    function publicGetName() {
            privateFunction();
    }
    //將暴露的公有指標指向到私有函式和屬性上
    return {
            setName: publicSetName,
            greeting: publicvar,
            getName: publicGetName
    };
}();
myRevealingModule.setName("Paul Kinlan");
< /script>

優點:

  • 該模式很容易之處哪些函式和變數可被公開訪問,改善了可讀性。
  • 如果一個私有函式引用一個公有函式,在需要打補丁時,公有函式是不能被覆蓋的。 因為私有函式將繼續引用私有實現,該模式並不適用於公有成員,只使用函式。
  • 2. Singleton 單例模式

    單例模式,能夠限制類的例項化次數只能為一次。單例模式,在該例項不存在的情況下, 可以透過一個方法建立一個類來實現建立類的新例項;如果例項已經存在,它會簡單返回該物件的引用;

    示例:

< script type="text/javascript">
var mySingleton = (function () {
        //例項保持了singleton 的一個引用
        var instance;
        function init() {
                //singleton
                //私有方法和變數
                function privateMethod() {
                        console.log("I am private");
                }
                var privateVariable = "I am also private";
                var privateRandomNumber = Math.random();
                return {
                        //公有方法和變數
                        publicMethod: function () {
                                console.log("The public can see me!");
                        },
                        publicProperty: "I am also public",
                        getRandomNumber: function() {
                                return privateRandomNumber;
                        }
                };
        };
        return {
                //獲取singleton 的例項,如果存在就返回,不存在就建立新例項
                getInstance: function() {
                        if(!instance) {
                                instance = init();
                        }
                        return instance;
                }
        };
})();
var singleA = mySingleton.getInstance();
var singleB = mySingleton.getInstance();
console.log(singleA.getRandomNumber()===singleB.getRandomNumber());//true
< /script>

在實踐中,當在系統中確實需要一個物件來協調其他物件時,>Singleton模式很有用。

示例:

< script type="text/javascript">
var SingletonTester = (function() {
        //options: 包含singleton所需配置資訊的物件
        //var options = {name:"test",pointX:5};
        function Singleton(options) {
                //如果未提供options,則設定為空物件
                options = options || {};
                //為singleton設定一些屬性
                this.name = "SingletonTester";
                this.pointX = options.pointX || 6;
                this.pointY = options.pointY || 10;
        }
        //例項持有者
        var instance;
        //靜態變數和方法的模擬
        var _static = {
                name: "SingletonTester",
                //獲取例項的方法,返回singleton物件的singleton例項
                getInstance: function(options) {
                        if(instance === undefined) {
                                instance = new Singleton(options);
                        }
                        return instance;
                };
                return _static;
        }
})();
var singletonTest = SingletonTester.getInstance({
        pointX: 5
});
console.log(singletonTest.pointX);//5
< /script>

以上就是解析Javascript設計模式Revealing Module 揭示模式單例模式的詳細內容


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2913545/,如需轉載,請註明出處,否則將追究法律責任。

相關文章