最简单的单例模式

最简单的单例模式

1.啥是单例模式?
答:单例模式就是一个类只有一个实例

2.为啥不用全局变量来实现呢?
答:因为单例模式既能有全局变量的优点,可以全局访问,但是没有全局变量的缺点

3.啥缺点?
答:如果我们要在一个全局脚本中放一个对象,那么我们要在程序运行前就创建好,如果是开发游戏,我们要在游戏运行前创建好这个对象,但是如果程序在运行时没有用到呢
比如在游戏中需要对需要动态加载资源进行管理(ResMgr),对很多弹窗进行管理(UIMgr),对场景进行管理(场景切换,当前是哪个场景),这些Manager都是单例,如果不使用单例也可以把这些Mgr写成一个类,在游戏开始之前,实例化这些类,但是只实例化一次,保存在全局变量中

单例的好处就是需要的时候,在进行实例化,不用把啥东西都放在全局变量中
4.如何实现单例模式?

先了解两个概念,静态方法和静态变量
4.1.啥是静态变量
一个类是所有实例的蓝图,模板,照着这个模板我们可以造出很多实例,在写一个类的时候,类有一些属性,还有一些方法,这些属性也可以被叫做变量,用来保存实例的状态和数据,比如我们要创建一个Dog类,我们需要一个color来保存狗的颜色。一个类的变量对所有的实例都是不变的,那么这个变量就叫静态变量(静态属性),,比如Dog类需要一个静态变量bark:‘wangwang’,来表示所有的狗的叫声都是一样的

class Dog{
 static bark = 'wangwang'
}

如果这变量对每个实例都是不一样的,就叫实例变量,或者也可以叫属性
4.2 啥是静态方法
静态方法是不需要进行实例化,就能调用的方法,就是静态方法,比如Math.round(),我们不需要实例化一个Math对象出来,就能直接调用这个方法,当然你也无法实例化出这个对象,因为这个Math类的构造函数是私有的,不允许你进行访问,大概就是这个意思
凡是这个一个方法不需要用到实例变量,那么对所有实例来说,这个方法是一样的,不需要从类实例化出一个对象,可以直接从类的身上调用,那么你需要创建的这个方法前面也需要加上static关键字,代表这个方法是静态方法

重点来了

假设我们需要创建一个资源加载管理类 ResMgr,我们可以用静态变量来保存这个类的实例,使用静态方法来返回这个类的实例,因为静态方法不需要实例化类就能调用,在静态方法中,我们只对这个类实例化了一次,对这个ResMgr我们第一次调用getInstance的方法,访问这个类的静态变量,我们实例化出了一个ResMgr的实例,第二次调用这个getInstance的方法的时候,我们我们再次访问到了这个类的静态变量,静态变量已经有值了,不会二次实例化

//这里只写了一个大概的框架
class ResMgr{
 constructor(){
 
}
	private loadedAssetMap = new Map();
 	static instance = null//ResMgr的单例
 	
 	static getInstance (){
	 	if(this.intance==null){
	 	this.instance = new ResMgr();
	 	}
 		return this.instance;
 	}
 	public loadAsset(){
 	
 	/ 加载资源
 	}
 	public loadAssetSync(){
 	
 	/ 同步加载资源
 	}
 	public  getAsset(){
 		//获取加载资源
 	}
	public releaseAsset(){
		//释放资源,手动加载的资源需要手动释放
}
 
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值