JavaScript設計模式之單例模式


一、單例模式概念

單例就是保證一個類只有一個實例,實現方法一般是先判斷實例存在與否,如果存在直接返回,如果不存在就創建了再返回,這就確保了一個類只有一個實例對象。在JavaScript里,單例作為一個命名空間提供者,從全局命名空間里提供一個唯一的訪問點來訪問該對象。

二、單例模式的作用和注意事項

模式作用:

1、模塊間通信

2、系統中某個類的對象只能存在一個

3、保護自己的屬性和方法

注意事項:

1、注意this的使用

2、閉包容易造成內存泄露,不需要的要趕快干掉

3、注意new的成本。(繼承)

三、單例模式代碼和實戰總結

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<!--<script>
    var Singleton = (function(){
        var instantiated;
        function init(){
            /*這里定義單例代碼*/
            return{
                publicMethod:function(){
                    console.log("hello world");
                },
                publicProperty:"test"
            };
        }

        return{
            getInstance:function(){
                if(!instantiated){
                    instantiated = init();
                }
                return instantiated;
            }
        }
    })();

    Singleton.getInstance().publicMethod();
</script>-->

<script>
     /*1.獨立的對象 建2個一個xiaowang一個xiaoli
     2.讓xiaoli跟xiaowang通過門鈴進行通信
     3.先看一下xiaowang家有沒有門 如果油門直接通過門鈴通訊didi如果沒有門先建門
     4.兩個單例之間看是通訊*/
    var xiaowang = (function(argument){
        var men;
        var xiaowangjia = function(msg){
            this.menling = msg;
        }
        var info = {
            sendMessage:function(msg){
                if(!men){
                    men = new xiaowangjia(msg);
                }
                return men;
            },
            abc:function(){
                return 123;
            }
        };
        return info;
    })();
    var xiaoli = {
        callXiaowang:function(msg){
            var _xw = xiaowang.sendMessage(msg);
            alert(_xw.menling);
            console.log(_xw.menling);
            _xw = null;//等待垃圾回收

            var abc = xiaowang.abc();
            console.log(abc);
        }
    }
    xiaoli.callXiaowang("didi");
</script>
</body>
</html>

 

 其他設計模式鏈接:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM