• 单例模式-3.透明的单例模式


    <!DOCTYPE html>
    <html lang="en">
    
        <head>
            <meta charset="utf-8" />
            <title>透明的单利模式</title>
        </head>
    
        <body>
    
        </body>
        <script type="text/javascript">
            //用户从这个类中创建对象的时候,可以像使用其他任何普通类一样
            var CreateDiv = (function() {
                var instance;
                var CreateDiv = function(html) {
                    if(instance) {
                        return instance;
                    }
                    this.html = html;
                    this.init();
                    return instance = this;
                };
                CreateDiv.prototype.init = function() {
                    var div = document.createElement("div");
                    div.innerHTML = this.html;
                    document.body.appendChild(div);
                };
                return CreateDiv;
            })()
            var a = new CreateDiv('seven1');
            var b = new CreateDiv('seven2');
            console.log(a === b); //true
    
            /*为了把 instance 封装起来,我们使用了自执行的匿名函数和闭包,并且让这个匿名函数返回
             真正的 Singleton 构造方法,这增加了一些程序的复杂度,阅读起来也不是很舒服
             CreateDiv 的构造函数实际上负责了两件事情。第一是创建对象和执行初始
             化 init 方法,第二是保证只有一个对象。虽然我们目前还没有接触过“单一职责原则”的概念,
             但可以明确的是,这是一种不好的做法,至少这个构造函数看起来很奇怪
             假设我们某天需要利用这个类,在页面中创建千千万万的 div,即要让这个类从单例类变成
             一个普通的可产生多个实例的类,那我们必须得改写 CreateDiv 构造函数,把控制创建唯一对象
             的那一段去掉,这种修改会给我们带来不必要的烦恼
            */
    
            //用代理实现单利模式;解决上面的问题
            var CreateDiv2 = function(html) {
                this.html = html;
                this.init();
            }
            CreateDiv2.prototype.init = function() {
                var div = document.createElement('div');
                div.innerHTML = this.html;
                document.body.appendChild(div);
            };
            //引入代理类
            var ProxySingleCreateDiv = (function() {
                var instance;
                return function(html) {
                    if(!instance) {
                        instance = new CreateDiv2(html);
                    }
                    return instance;
                }
            })()
    
            var a1 = new ProxySingleCreateDiv('seven1');
            var b1 = new ProxySingleCreateDiv('seven2');
            console.log(a1 === b1);
        </script>
    
    </html>
  • 相关阅读:
    CoreData数据库浅析
    FMDB第三方框架
    SQLite浅析
    iOS开发工程师面试题(二)
    iOS开发工程师面试题(一)
    RunTime&RunLoop初见
    GCD定时器
    2016年4月21百度iOS实习生在线笔试题&编程题
    网络天荒地老之UIWebView&WebKit
    expdp/impdp
  • 原文地址:https://www.cnblogs.com/hanhui66/p/7110740.html
Copyright © 2020-2023  润新知