前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单例模式(创造型设计模式)

单例模式(创造型设计模式)

作者头像
一行舟
发布2022-08-25 14:12:49
4150
发布2022-08-25 14:12:49
举报
文章被收录于专栏:一行舟一行舟

设计模式指导思想:找到不同场景下,需求容易发生变化的地方,把这一部分变化的逻辑封装起来。

创造型设计模式一共有5种:工厂模式、抽象工厂、单例模式、创造者模式、原型模式。本文我们介绍工厂模式。

作用

保证一个类在当前进程中只存在一个实例。单例模式又分为懒汉模式和饿汉模式。

懒汉模式-实现步骤

  1. 创建单例单类。
  2. 把构造函数私有化,防止外部实例化。
  3. 创建私有属性为当前类型。
  4. 创建单例类的公有方法,公有方法返回当前类的实例。

示例:

代码语言:javascript
复制
/**
 * 在调用getInstance方法的时候才初始化lazysingleton
 * 所以称为懒汉单例模式
 */
export class LazySingleton{
    // 私有化constructor方法,防止外部实力化对象
    private constructor(){}

    private static instance: LazySingleton

    public static getInstance(): LazySingleton{
        if(!this.instance){ // 如果是支持多线程的语言,需要加线程锁
            return new LazySingleton()
        }
        return this.instance
    }
}

饿汉模式-实现步骤

  1. 创建单例类。
  2. 把构造函数私有化,防止外部实例化。
  3. 创建私有属性为当前类型,并实例化。
  4. 创建单例类的公有方法,公有方法返回当前类的实例。示例:
代码语言:javascript
复制
/**
 * 在class加载时就实力化hungrysingleton对象
 * 称为饿汉单例模式
 */
export class HungrySingleton{
    // 私有化constructor方法,防止外部实力化对象
    private constructor(){}

    private static instance: HungrySingleton = new HungrySingleton() // 如果是支持多线程的语言,需要加线程锁

    public static getInstance(): HungrySingleton{
        return this.instance
    }
}

缺点

  1. 违反了单一职责原则。
  2. 多线程下实现单例需要线程锁。
  3. 多进程下实现单例,需要更复杂的处理。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一行舟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作用
  • 懒汉模式-实现步骤
  • 饿汉模式-实现步骤
  • 缺点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档