TypeScript单例创建

TypeScript单例创建是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点,在TypeScript中,我们可以使用不同的方法来实现单例模式,以下是两种常见的实现方法:

普陀网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联

1、懒汉式(Lazy initialization):

懒汉式是指在第一次调用时才创建实例,这种方法的优点是延迟了实例的创建,节省了资源,以下是一个使用懒汉式实现的TypeScript单例类:

class Singleton {
  private static instance: Singleton | null = null;
  private constructor() {}
  public static getInstance(): Singleton {
    if (Singleton.instance === null) {
      Singleton.instance = new Singleton();
    }
    return Singleton.instance;
  }
}
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // 输出 true,表示两个实例是同一个对象

在这个例子中,我们首先定义了一个名为Singleton的类,这个类有一个静态属性instance,用于存储类的实例,我们还定义了一个私有构造函数,以防止外部直接创建实例,我们定义了一个名为getInstance的静态方法,用于获取类的实例,在这个方法中,我们首先检查instance属性是否为null,如果是,则创建一个新的实例并将其赋值给instance属性,我们返回instance属性的值,这样,我们就可以确保每次调用getInstance方法时,都返回相同的实例。

2、饿汉式(Eager initialization):

饿汉式是指在类加载时就创建实例,这种方法的优点是简单易懂,但可能会浪费资源,以下是一个使用饿汉式实现的TypeScript单例类:

class Singleton {
  private static instance: Singleton = new Singleton();
  private constructor() {}
  public static getInstance(): Singleton {
    return Singleton.instance;
  }
}
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // 输出 true,表示两个实例是同一个对象

在这个例子中,我们首先定义了一个名为Singleton的类,这个类有一个静态属性instance,并在类加载时就创建了一个新的实例并将其赋值给instance属性,我们还定义了一个私有构造函数,以防止外部直接创建实例,我们定义了一个名为getInstance的静态方法,用于获取类的实例,在这个方法中,我们直接返回instance属性的值,这样,我们就可以确保每次调用getInstance方法时,都返回相同的实例。

以上就是两种常见的TypeScript单例实现方法,懒汉式和饿汉式各有优缺点,具体选择哪种方法取决于实际需求,懒汉式适用于在第一次调用时才需要创建实例的场景,而饿汉式适用于在类加载时就确定需要创建实例的场景,无论采用哪种方法,都可以确保一个类只有一个实例,并提供一个全局访问点。

文章名称:TypeScript单例创建
链接分享:http://www.shufengxianlan.com/qtweb/news44/148744.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联