TS 单件设计模式

运TS 类,首先会为静态成员开辟内存空间,静态成员的内存空间分配的时间要早于对象空间的分配。
并且无论是否调用这个类,是否创建对象,TS都会为这个类的静态方法、静态属性分配内存空间
只要前服务器不重启或控制台程序还没有结束,都一直存在这个内存空间。后续无论调用多少次,都是调用的同一空间
内存空间有三个区:静态区、栈、堆

普通类
class Student {
  public sname?: string; //对象属性
  public static only?: number; //类的静态属性

  public static className() {
    //this.  //可以看见,能点出一堆类属性和方法,没有talk方法和sname属性
  }
  //注意,js中可以直接new这个函数,当做构造函数。但TS是不允许的,更面向对象
  public talk() {
    //this.  //只能点出实例对象属性和方法,没有className方法和only属性
    console.log("1-talk");
  }
}
const a = new Student();
a.talk(); //1-talk
//TS 类可以访问 prototype 原型对象属性,修改或覆盖都可。
//但无法在 prototype 原型对象属性增加新的方法或属性
Student.prototype.talk = () => {
  console.log("2-talk");
};
a.talk(); //2-talk

//Student.prototype.page = 2  //不能新增属性或方法

懒汉式单件设计模式

【延迟使用】等到需要使用对象时才创建对象,按需创建

懒汉式单件设计模式
第一步:把构造器设置为私有的,不允许外部new
第二步:至少应该提供一个外部访问的静态方法,外部可以这得到一个对象。
第三步:外部调用第二步提供的静态方法来获取一个对象

class Moon {
  static cname: string = "月亮";
  static cself: Moon;
  constructor() {
    console.log("月亮构造器");
  }
  public static setMoon() {
    if (!this.cself) {
      console.log("此静态属性,目前是undefined");
      this.cself = new Moon();
      console.log("静态属性已指向一个对象空间");
    }
    return this.cself;
  }
  public talk() {
    console.log("hello,我是月亮");
  }
}
const b = Moon.setMoon();
b.talk();

饿汉式单件设计模式

饿汉式单件设计模式: 是无论你是否用到了实例对象,一开始就建立这个唯一的对象
第1+3步和上面一样
第2步: 建立一个静态引用属性,同时把这个静态引用属性指向实例对象【new 自己()】

class Sun {
  static cname: string = "太阳";
  static cself: Sun = new Sun();
  constructor() {
    console.log("太阳构造器");
    this.talk();
  }
  public talk() {
    console.log("hello,我是太阳");
  }
}

这个ts文件并没有调用sun类或方法,但运行这个文件,可以看出它执行了。
是上面静态属性的功能实现的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容