创建型-单例模式

创建,模式 · 浏览次数 : 40

小编点评

**单例模式实现思路** **1. 确定单例模式** * 一个类只有一个实例。 * 创建一个类的时候,检查是否存在已创建的实例。 **2. 创建单例实例** * 编写一个静态方法,名为 `getInstance()`,接收三个参数:`name`、`creator` 和 `products`。 * 在方法中,检查 `instance` 的值。 * 如果 `instance` 为 `null`,则创建一个新的实例并将其存储在 `instance` 中。 * 返回 `instance`。 **3. 限制单例实例的创建** * 确保 `getInstance()` 方法只能在程序启动时调用一次。 * 使用静态变量或构造函数锁,以确保线程安全。 **4. 提供全局访问点** * 将单例实例的属性或方法声明为全局变量或静态变量。 * 这将允许从任何处访问单例实例。 **5. 示例** ```js class SingletonApple { static instance = null; constructor(name, creator, products) { this.name = name; this.creator = creator; this.products = products; if (!SingletonApple.instance) { SingletonApple.instance = this; } return SingletonApple.instance; } static getInstance(name, creator, products) { if (!this.instance) { this.instance = new SingletonApple(name, creator, products); } return this.instance; } } ``` **注意:** * 单例模式仅保证一个类的实例,但它不保证这些实例是独立的。 * 单例模式通常用于创建全局变量或访问全局资源。 * 单例模式可能与其他设计模式(例如工厂模式)一起使用。

正文

什么是单例模式

  单例模式 (Singleton Pattern)又称为单体模式,保证一个类只有一个实例,并提供一个访问它的全局访问点。也就是说,第二次使用同一个类创建新对象的时候,应该得到与第一次创建的对象完全相同的对象。

 简单的说就是保证一个类仅有一个实例,并提供一个访问它的全局访问点,这样的模式就叫做单例模式。

单例模式的实现思路

现在我们先不考虑单例模式的应用场景,单看它的实现,思考这样一个问题:如何才能保证一个类仅有一个实例?
一般情况下,当我们创建了一个类(本质是构造函数)后,可以通过new关键字调用构造函数可以生成任意多的实例对象,像这样:

class Single {
    show() {
        console.log('我是一个单例对象')
    }
}

const s1 = new Single()
const s2 = new Single()

// false
s1 === s2

先 new 了一个 s1,又 new 了一个 s2,很明显 s1 和 s2 之间没有任何瓜葛,两者是相互独立的对象,各占一块内存空间。而单例模式想要做到的是,不管我们尝试去创建多少次,它都只给你返回第一次所创建的那唯一的一个实例

要做到这一点,就需要构造函数具备判断自己是否已经创建过一个实例的能力,那么只要用一个变量保存创建的实例,后面判断这个变量即可。

js实现

// es6
class SingletonApple {
  static instance = null;
  constructor(name, creator, products) {
    this.name = name;
    this.creator = creator;
    this.products = products;
    if (!SingletonApple.instance) {
      SingletonApple.instance = this;
    }
    return SingletonApple.instance;
  }
  //静态方法
  static getInstance(name, creator, products) {
    if (!this.instance) {
      this.instance = new SingletonApple(name, creator, products);
    }
    return this.instance;
  }
}

  console.log(SingletonApple.instance);
  let ss = new SingletonApple("苹果公司", "阿辉", 
                              ["iPhone", "iMac", "iPad", "iPod"]);
  console.log(ss);
  console.log(ss === SingletonApple.instance);
  let appleCompany = SingletonApple.getInstance("苹果公司", "乔布斯", [
    "iPhone",
    "iMac",
    "iPad",
    "iPod"
  ]);
  let copyApple = SingletonApple.getInstance("苹果公司", "阿辉", [
    "iPhone",
    "iMac",
    "iPad",
    "iPod"
  ]);
  console.log(appleCompany === copyApple); //true


// 闭包-通过自执行函数创建闭包变量
const Singleton = (function () {
    const SingleClass = function (name, creator, products) {
      this.name = name;
      this.creator = creator;
      this.products = products;
    };
    let instance = null;
    return function (name, creator, products) {
      if (!instance) {
       	 // 如果不存在 则new一个
          instance = new SingleClass(name, creator, products) 
      }
      return instance;
    }
 })()

let s1 = new Singleton("单例1", "阿辉1", [
  "iPhone",
  "iMac",
  "iPad",
  "iPod"])

let s2 = new Singleton("单例2", "阿辉2", [
  "iPhone",
  "iMac",
  "iPad",
  "iPod"])

console.log(s1 === s2)
console.log(s1)

注意点

  1. 确保只有一个实例
  2. 并提供全局访问

与创建型-单例模式相似的内容:

创建型-单例模式

什么是单例模式 单例模式 (Singleton Pattern)又称为单体模式,保证一个类只有一个实例,并提供一个访问它的全局访问点。也就是说,第二次使用同一个类创建新对象的时候,应该得到与第一次创建的对象完全相同的对象。 简单的说就是保证一个类仅有一个实例,并提供一个访问它的全局访问点,这样的模式

Singleton Pattern 单例模式简介与 C# 示例【创建型5】【设计模式来了_5】

根据实例介绍单例模式。

【23种设计模式】单例模式(一)

## 前言: 单例模式是创建型模式5种中的第1种,**关注对象的创建, 保证一个类仅有一个实例,并且提供一个全局访问点**。在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只创建一个实例

设计模式之单例模式

单例模式简介 单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点以获取该实例。它是一种创建型模式,通常用于需要严格控制某个类的实例数量的情况。单例模式确保一个类在整个应用程序生命周期中只有一个实例,因此可以节省系统资源,同时提供了一个集中的访问点,以便在需要时获取该实例。 以下是单

软件设计模式系列之六——单例模式

单例模式(Singleton Pattern)是一种常见的创建型设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这意味着无论何时何地,只要需要该类的实例,都会返回同一个实例,而不是创建多个相同的实例。

设计模式学习(二):单例模式

设计模式学习(二):单例模式 作者:Grey 原文地址: 博客园:设计模式学习(二):单例模式 CSDN:设计模式学习(二):单例模式 单例模式 单例模式是创建型模式。 单例的定义:“一个类只允许创建唯一一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。”定

使用c#实现23种常见的设计模式

# 使用c#实现23种常见的设计模式 设计模式通常分为三个主要类别: - 创建型模式 - 结构型模式 - 行为型模式。 这些模式是用于解决常见的对象导向设计问题的最佳实践。 以下是23种常见的设计模式并且提供`c#代码案例`: ## 创建型模式: ### 1. 单例模式(Singleton) ```

7种创建方式,带你理解Java的单例模式

介绍创建Java单例对象的七种方式,重点掌握哪些创建方式是线程安全的,哪些方式是线程不安全的,并能够在实际项目中灵活运用设计模式,编写可维护的代码。

头一次见单例模式讲的如此透彻

## 简介 单例模式是一种常用的软件设计模式,用于创建类型。通过单例模式的方法创建的类在当前进程中只有一个实例。单例模式的类只能允许一个实例存在。单例模式的作用是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个。 组成部分: 1. 私有化构造方法。 2. 私有化内部实例。 3.

从源码层面深度剖析Spring循环依赖

作者:郭艳红 以下举例皆针对单例模式讨论 图解参考 https://www.processon.com/view/link/60e3b0ae0e3e74200e2478ce 1、Spring 如何创建Bean? 对于单例Bean来说,在Spring容器整个生命周期内,有且只有一个对象。 Sprin