一个例子贯穿单例模式,Typescript的private,public,static 属性理解

什么是单例模式

通俗的讲单例模式就是不容许经过 const instent = new Demo() 的形式来屡次实例化一个类,因此咱们首先会有以下的代码函数


原理:咱们能够看到实例化的时候 new Person()下面飘红了,解释是不容许实例化构造函数是私有类型的类,由于 private声明后只能在类的内部使用this

变通

既然不能经过外部实例化这个类,那么咱们只能经过内部来访问,同时也要通知外部,因此咱们有了以下的代码3d


原理:经过 static声明咱们能够经过类的自己来调用这个方法,经过这个方法再来实例化这个类,就达到了内部访问私有构造函数的目的。code

或许看到这,你会不屑的说一句:绕来绕去有区别吗?屡次调用这个静态方法不仍是屡次实例化了这个类。。。(没错!的确是这样)cdn

完善

为了解决上面提到的问题,咱们能够用一个变量用来专门保存一个实例,当再次访问的时候咱们直接返回这个变量是否是就能够完美解决这个问题了?因此上代码blog


原理: 咱们声明一个私有变量instance(为何又是静态的呢?)来存储咱们第一次实例化的结果,而后以后的每次访问由于instance已是存在的了因此返回的结果都是同一个实例,因此是否是就达到了单例的效果呢?至于为何又是静态的呢?由于在static声明中访问的this都是类自己,咱们若是不写static,那么这个this是访问不到实例属性的。it

加餐

下面是一个关于ts public属性的小技巧io


咱们一般的作法来给类的属性赋值是 将参数传入构造函数,而后在构造函数中在进行赋值,若是是TS还须要先声明属性。class

简写以下:变量


咱们能够经过在参数的时候直接给定参数类型,他就等于上面的声明再赋值

总结

经过简单的十几行代码能够很清晰的理解到:

1. 单例模式就是只能实例化一次,以后的每次其实都是访问同一个实例;

2.private 声明后只能在类内部访问到;

3.static 声明后只能经过类自己访问到;

4.public 声明类的属性能够在传参时进行简写

相关文章
相关标签/搜索