- A+
所属分类:Web前端
1.了解并上手
-
核心思想:保证一个类只有一个实例对象,并且提供了一个全局的访问点,(外部通过这个访问点来访问该类的唯一实例)
-
全局访问点:全局静态字段,就是声明一个私有的静态的属性,类型是该类;因为静态字段是属于类的,就可以保证只有一个实例;
-
私有构造函数:保证外部无法实例化该类;
1 //常规中,先判断这个实例是否已经被new 过了,如果没有,让这个这个静态属性Goods._instance等于这个实例;函数返回的是这个实例 2 3 export default class Goods{ 4 private static _instance:Goods; 5 private num:number=3; 6 private constructor(){ //私有构造函数 7 8 } 9 //常规写法 10 public static getInstance():Goods{ 11 if(!Goods._instance) Goods._instance=new Goods(); 12 return Goods._instance; 13 } 14 //返回这个实例, 15 //使用执行器函数get写 16 //当获取这个值的时候会调用这个函数 17 public static get _instance():Goods{ 18 return Goods._instance || (Goods._instance=new Goods()) 19 } 20 21 public run():void{ //实例方法 22 console.log("aa") 23 } 24 25 } 26 27 //外部执行方式 28 1.Goods.getInstance().run() //这样会执行这个run方法,因为getInstance是个静态方法,必须使用类调用,而这个静态方法返回的是一个实例,就能调用实例方法run(); 29 2.Goods.instance.run()//get执行方式 30 31 //每次调用都是同一个对象,所以Goods.instance=Goods.instance这两个相等,都是一个实例;
2.使用场景
一个操作系统中可以存在多个打印任务,但我们只有一个打印机,同一时间只能有一个正在工作的任务,这个时候内存中打印机的这个类就必须是单例的