单例模式--《js设计模式和开发实践》

简介: 单例模式--《js设计模式和开发实践》
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<button id="loginBtn">登录</button>
<script>
// 1
----
//   var loginLayer=(function(){
//       var div=document.createElement("div");
//       div.innerHTML="我是登录浮窗";
//       div.style.display="none";
//       document.body.appendChild(div);
//       return div
//   })();
//    document.getElementById("loginBtn").onclick=function(){
//        loginLayer.style.display="block";
//    }
    //以上代码,在一开始就创建了登录浮窗,浪费了dom节点
//2
---
//    var createLoginlayer=function(){
//        var div=document.createElement("div");
//        div.innerHTML="我是登录浮窗";
//        div.style.display="none";
//        document.body.appendChild(div);
//        return div
//    }
//    document.getElementById("loginBtn").onclick=function(){
//        var loginLayer=createLoginlayer();
//        loginLayer.style.display="block";
//    }
// 3.
-----
//    虽然达到了惰性的目的,但是失去了单例的效果
//    var createLoginLayer=(function(){
//        var div;
//        return function(){
//            if(!div){
//                div=document.createElement("div");
//                div.innerHTML="我是登录浮窗";
//                div.style.disaplay="none";
//                document.body.appendChild(div);
//            }
//            return div
//        }
//    })();
//    document.getElementById("loginBtn").onclick=function(){
//        var loginLayer=createLoginLayer();
//        loginLayer.style.display="block";
//    }
//4.
----
//    但是以上代码是违反单一职责原则的;下次如果创建iframe,就需要再把代码写一遍;如下:
//    var createIframe=(function(){
//        var iframe;
//        return function(){
//            if(!iframe){
//                iframe=document.createElement("iframe");
//                iframe.style.display="none";
//                document.body.appendChild(iframe)
//            }
//        }
//        return iframe;
//    })
//    我们需要把不变的部分隔离开来;先不考虑创建div/iframe;用变量来标志是否创建过对象
//    var obj;
//    if(!obj){
//        obj=***;
//    }
// 我们把逻辑封装在getSingle函数中
-----------------------
    var getSingle=function(fn){
        var result;
        return function(){
            return result||(result=fn.apply(this,arguments))
        }
    }
    var createLoginLayer=function(){
        var div=document.createElement("div");
        div.innerHTML="我是登录浮窗";
        div.style.display="none";
        document.body.appendChild(div);
        return div
    }
    var createSingleLoginLayer=getSingle(createLoginLayer);
    document.getElementById("loginBtn").onclick=function(){
        var loginLayer=createLoginLayer();
        loginLayer.style.disaplay="block";
    }
// 下面再试一试创建唯一的iframe用于动态加载第三方页面
-------------------------------
    var createSingleIframe=getSingle(function(){
        var iframe=document.createElement("iframe");
        document.body.appendChild(iframe);
        return iframe;
    })
    document.getElementById("loginBtn").onclick=function(){
        var loginLayer=createSingleIframe();
        loginLayer.style.display="block";
        loginLayer.src="https://baidu.com"
    }
</script>
</body>
</html>
目录
相关文章
|
13天前
|
设计模式 存储 前端开发
前端必须掌握的设计模式——单例模式
单例模式是一种简单的创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。适用于窗口对象、登录弹窗等场景,优点包括易于维护、访问和低消耗,但也有安全隐患、可能形成巨石对象及扩展性差等缺点。文中展示了JavaScript和TypeScript的实现方法。
|
19天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
21 2
|
28天前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
29 2
|
1月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
38 4
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
24天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
1月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入理解与应用
【10月更文挑战第22天】 在软件开发中,设计模式是解决特定问题的通用解决方案。本文将通过通俗易懂的语言和实例,深入探讨PHP中单例模式的概念、实现方法及其在实际开发中的应用,帮助读者更好地理解和运用这一重要的设计模式。
21 1
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
27 0
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
29 0
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
本教程详细讲解了Kotlin中的单例模式实现,包括饿汉式、懒汉式、双重检查锁、静态内部类及枚举类等方法,适合需要深入了解Kotlin单例模式的开发者。快速学习者可参考“简洁”系列教程。
37 0