前端_js设计模式

什么是设计模式

1. 什么是设计模式

  • 设计模式是前人总结出的,解决开发中某类问题的方法

  • 我们在过去的代码编写中已经接触过很多的设计模式了,只不过当时咱们不知道这就是一种设计模式而已;

  • 设计模式之间并不是互相独立的,往往一个功能需要多个设计模式的配合实现;

  • 每个设计模式所解决的问题肯定是不同的,根据这些模式的功能我们可以将他们分成很多几大类:创建型设计模式、结构型设计模式、行为型设计模式。当然在JavaScript里面还可以有其他的一些特殊的设计模式,我们也会介绍到。

1. 单例模式

单例模式(Singleton):确保某一个类只有一个实例。

JavaScript创建实例对象的方法有很多,所以很多写法我们都可以认为是单例模式:

/*
    上面做法在没有调用时就已经初始化DOM节点了,
    很显然,当我们使用时再初始化这样更好
    改良一下:
*/
let Popup = (function () {
    let instance;
    return function () {
        if (!instance) {
            instance = document.createElement("div");
        }
        instance.show = function (arg) {
            this.innerText = arg;
            document.body.appendChild(this);
        };
        return instance;
    };
})();
Popup().show("popup1");//测试使用1
Popup().show("popup2");//测试使用2
console.log(Popup() === Popup());//测试单例
/*
    抽象化一下,写成类的形式:
*/
let Popup = (function () {
    let instance = null;
    class Pop{
        constructor(){
            if( instance ){
                return instance;
            }
            instance = this;
            this.ele = document.createElement("div");
            this.show = function (arg) {
                this.ele.innerText = arg;
                document.body.appendChild(this.ele);
            };
        }
    }
    return Pop;
})();
let a = new Popup();
a.show("popup1");//测试使用1
let b = new Popup();
b.show("popup2");//测试使用2
console.log(a === b);//测试单例
//核心实现代码
let Single = (function(){
    let instance = null;
    class S{
        constructor(){
            if(instance){
                return instance;
            }
            instance = this;
            //code……
        }
    }
})();
//实例化测试
console.log( new Single() === new Single() );

**总结:**当需求实例唯一、命名空间时,就可以使用单例模式。结合闭包特性,用途广泛

 

posted @ 2022-12-12 12:46  啊賢  阅读(18)  评论(0编辑  收藏  举报