设计模式-单例模式

  • 设计模式-单例模式已关闭评论
  • 212 次浏览
  • 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.使用场景

      一个操作系统中可以存在多个打印任务,但我们只有一个打印机,同一时间只能有一个正在工作的任务,这个时候内存中打印机的这个类就必须是单例的