单例的厉害之处
昨天在领导手把手指导下写了一个单例组件,今天早上看了一遍代码,简单小结一下这个组件的实现过程以加深印象。
组件使用的场景:一个屏幕中有很多鱼游来游去,点击一条鱼,出现一个介绍弹窗,弹窗有内容,内容分图片、声音、视频等类型资源。
弹窗本身是一个单例组件,弹窗中的内容是一个单例组件。点击不同的鱼,出现的内容不同。
一、实现单例:
export class PanelContent extends egret.DisplayObjectContainer {
public static get instance(): PanelContent {
if (!PanelContent._instance) {
PanelContent._instance = new PanelContent()
}
return PanelContent._instance
}
public constructor() {
super()
this.initView()
this.data = RES.getRes('fishInfo_json')
}
private initView {
this.addEventListener(egret.Event.REMOVED_FROM_STAGE, this.onDestory, this)
// 初始化图片、声音、视频等资源的变量
}
public show(key: string) {
if (!this.data[key]) {
return
}
this.dataItem = this.data[key]
// 根据传入的鱼名称设置它的具体资源
}
}
二、使用这个单例:
switch(name) {
case 'fish1':
PanelContent.instance.show('crocodile')
InteractPannel.instance.setContent(PanelContent.instance)
InteractPannel.instance.show();
}
一个类的单例是这个类的一个实例。用单例方式使用这个类以后,这个类的对象只会在内存中存在一个。
呼应标题,单例模式的厉害之处在于,每次使用 PanelContent.instance
时,如果这个类的静态属性instance
没有指向一个对象,就创建一个这个类的对象,并把初始化一些对象的属性。这些是静态的,每条鱼的处理都一样。
-
那么点击不同的鱼显示相应的介绍,怎么实现?
-
让这个类暴露出
show()
这个成员方法,让它接受参数以满足不同的鱼的信息显示 -
怎么通过一个参数就拿到有关这个鱼的所有相关资源?
-
在外部管理一个 json 静态文件,将所有鱼的相关资源地址都写进去,在
show()
方法中,获取指定鱼的资源。
2021-12-21