美文网首页
【吃透】JS设计模式 · 单例模式

【吃透】JS设计模式 · 单例模式

作者: 简单单的 | 来源:发表于2023-04-26 18:26 被阅读0次

## 概念

单例模式是指在内存中只创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存占用,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。

## 优点

适合于单一对象,只生成一个对象实例,避免频繁创建和销毁实例,减少栈内存占用。

只有一个实例且全局可访问该实例,便于维护一个全局实例对象

## 缺点

不适用动态扩展对象、创建多个相似对象的场景

## 代码实现

```

let A = function (name) {

    this.name = name

    this.ins = null

}

A.getName = function (name) {

    return new A(name)

}

A.toNum = function (age) {

if(!isNaN(age)) {

    return Number(age)

} else {

    return '未知年龄'

}

}

// 实例控制器

A.insHandle = function (str) {

    if(this.ins) { //核心点 只允许有一个实例

        return this.ins

    }

    return this.ins = new A(str)

}

console.log(A.getName('张三').name, A.toNum(44), A.insHandle('这是一个实例').name) // 张三 44 这是一个实例

```

定义A函数, A为一个实例。因此我们可以在函数 A 中定义一个 insHandle() 方法来管控这个单例,

并创建返回类实例对象,而不是通过传统的 new 操作符来创建类实例对象。

this.ins 存储创建的实例对象,每次接收到创建实例对象时,判断 this.ins 是否有实例对象,有则返回,没有则创建并更新 this.ins 值,因此无论调用多少次 insHandle(),最终都只会返回同一个 A 类实例对象(return this.ins = new A(str))。

但是 这种管理单例的操作,与对象创建的操作,功能代码耦合在一起,不符合 “单一职责原则”,无法使用 `new` 来进行类实例化,需约束该类实例化的调用方式

我们就这一点  对他进行优化改进

```

let A = (function(){

    let ins;

    return function(name, age, msg) {

        if (ins) { //核心点 只允许有一个实例

            return ins;

        }

        this.name = name;

        this.age = age;

        this.msg = msg;

        return ins = this;

    }

})();

A.prototype.getMsg = function() {

    return `${ this.name } ${ this.age } ${ this.msg }`

}

let zs = new A('张三', 44, '这是一个实例')

let ls = new A('李四', 32, '这是一个实例')

console.log(zs === ls); true

console.log(ls.getMsg());  // 张三 44 这是一个实例

console.log(zs.getMsg());  // 张三 44 这是一个实例

```

相关文章

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • js的4种设计模式及Vue小结(1)

    4种js设计模式 模块模式(module) 原型模式(prototype) 观察者模式(observer) 单例模...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 十道前端面试题第【05】篇

    摘要:本篇是设计模式专题,分享了10个设计模式的JS示例代码——工厂模式、单例模式、原型模式、建造者模式、外观模式...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

网友评论

      本文标题:【吃透】JS设计模式 · 单例模式

      本文链接:https://www.haomeiwen.com/subject/ohgvjdtx.html