TypeScript单例创建是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点,在TypeScript中,我们可以使用不同的方法来实现单例模式,以下是两种常见的实现方法:
(图片来源网络,侵删)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单例实现方法,懒汉式和饿汉式各有优缺点,具体选择哪种方法取决于实际需求,懒汉式适用于在第一次调用时才需要创建实例的场景,而饿汉式适用于在类加载时就确定需要创建实例的场景,无论采用哪种方法,都可以确保一个类只有一个实例,并提供一个全局访问点。
最新评论
本站CDN与莫名CDN同款、亚太CDN、速度还不错,值得推荐。
感谢推荐我们公司产品、有什么活动会第一时间公布!
我在用这类站群服务器、还可以. 用很多年了。