[TypeScript][CocosCreator]泛型单例

/**
 * Ts's singleton is too ugly.so i will not use it.
 */
export class Singleton<T>{
    private static instance: any = null;
    public static Instance<T>(c: { new(): T }): T {
        if (this.instance == null) {
            this.instance = new c();
        }
        return this.instance;
    }

    public Update(dt: number) {

    }
}

还需要把类传入,用于构造函数生成instance,感觉很不友好啊。

使用示例

Animal.ts

import { Singleton } from "./Singleton";

export class Animal<T> extends Singleton<T> {
    public root: string = "animal";
}

Beast.ts

import { Animal } from "./Animar";

export class Beast extends Animal<Beast> {
    public name = "beast 1";
    constructor() {
        super();
        this.root = "i am a beast";
    }
}

Bird.ts

import { Animal } from "./Animar";

export class Bird extends Animal<Bird> {
    public name: string = "bird 1";
    constructor(){
        super();
        this.root="i am a bird";
    }
}

使用

    let bird = Bird.Instance<Bird>(Bird);
    let beast = Beast.Instance(Beast);

    Debug.Log(bird.root);
    Debug.Log(bird.name);
    Debug.Log(beast.root);
    Debug.Log(beast.name);

打印结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值