aiyoudiao aiyoudiao
  • JavaScript
  • Vue
  • React
  • 低代码
  • 线性系统
  • 暂未分类
  • LeetCode
  • 算法
  • 数据结构
  • 设计模式
  • Other
  • PMP
  • Office
  • 面试
  • Bash
  • 流年往事
  • 经验片段
  • 读书杂感
  • 归档
  • 分类
  • 标签
  • 简介
  • 收藏
  • 有趣
  • 文档

码二

扫微信二维码,认识一下码二吧😉。
  • JavaScript
  • Vue
  • React
  • 低代码
  • 线性系统
  • 暂未分类
  • LeetCode
  • 算法
  • 数据结构
  • 设计模式
  • Other
  • PMP
  • Office
  • 面试
  • Bash
  • 流年往事
  • 经验片段
  • 读书杂感
  • 归档
  • 分类
  • 标签
  • 简介
  • 收藏
  • 有趣
  • 文档
  • LeetCode

  • 算法

  • 数据结构

  • 设计模式

    • 浅聊设计理念
    • 谈一谈设计原则
    • 工厂方法模式
    • 抽象工厂模式
    • 建造者模式
    • 原型模式
    • 单例模式
      • 前言
      • 单例模式
    • 桥接模式
    • 代理模式
    • 装饰器模式
    • 适配器模式
    • 享元模式
    • 组合模式
    • 外观模式
    • 观察者模式
    • 模板方法模式
    • 策略模式
    • 职责链模式
    • 状态模式
    • 迭代器模式
    • 访问者模式
    • 备忘录模式
    • 命令模式
    • 解释器模式
    • 中介者模式
  • Other

  • vue3设计与实现

  • 算法与设计
  • 设计模式
aiyoudiao
2022-02-21

单例模式

# 前言

单例模式属于创建型模式,这个类型的设计模式是将 对象的创建和使用解耦了,花式的去创建对象。

# 单例模式

应用场景:用于解决资源使用时的冲突问题,一般是对象创建后使用时,该实例要全局唯一。其实也可以指定数量的对象实例唯一,不一定非得只有一个,能够区分边界就行,能够对边界区分隔离,就能解决资源使用时冲突的问题。单例模式中对象创建的方式有两种,一种是预加载,另一种是懒加载。

理解:对象的创建和使用解耦了,单例模式适用于使用对象时资源冲突的问题,比如所有资源都已经放入一个对象中缓存住了,下一次如果使用这个缓存的对象就会非常的方便,否则使用一个重新创建的崭新对象,就会丢失之间的数据记录,造成系统不稳定,就像你已经登录过了,假使你之后的每一次操作都要再进行登录,那用户会觉得很烦恼。预加载就像点击一个APP后自动进行登录,而懒加载像是你点击APP后,APP登录界面的账号密码都已经自动填上了,只需要你点击一下登录按钮。

namespace creative_mode_05 {

    // 登录功能接口
    interface Loginable {
        login(): void
    }

    // 产品类,懒加载
    class LoginForm implements Loginable {

        // 唯一的实例和构造函数都上锁
        private static instance?: LoginForm
        private constructor() { }
      
        login(): void {
            console.log('1.登录成功')
        }

        static getLoginInstance(): LoginForm {

            if (this.instance) {
                return this.instance
            }

            return this.instance = new LoginForm()
        }
    }

    // 产品类 预加载
    class LoginForm2 implements Loginable {

        // 唯一的实例和构造函数都上锁
        private static instance: LoginForm2 = new LoginForm2()
        private constructor() { }
      
        login(): void {
            console.log('2.登录成功')
        }

        static getLoginInstance(): LoginForm2 {
            return this.instance
        }
    }

    // 使用1
    const loginFormInstance = LoginForm.getLoginInstance() // 实例创建的时机在第一次获取实例时,第一次获取才会创建,
    loginFormInstance.login()

    // 使用2
    const loginForm2Instance = LoginForm2.getLoginInstance() // 实例创建的时机在这个LoginForm2的class被加载时
    loginForm2Instance.login()
}

#设计模式
上次更新时间: 10年18月2023日 01时57分53秒
原型模式
桥接模式

← 原型模式 桥接模式 →

最近更新
01
01.数据结构导论一览.md
10-16
02
30.2023年06月04日.md
06-04
03
08.与测量相关.md
05-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 aiyoudiao 码二 备案号: 鄂ICP备2022002654号-1