js ts 思想 单例模式

#单例模式#
// 管理类只产生一个对象
// 一个管理类 只产生一个对象---去 管理所有对象A B C
// 一个类 可能有很多对象A B C
// 
class SoundManager {
    // static直接类名调用
    static Instance = new SoundManager()
    private static instance: soundManager = null;//null给不给都行
    private constructor() {

    }

    static Instance() {
        //当前单例是否产生
        if (!SoundManager.instance) {
            SoundManager.instance = new SoundManager()
        }
        return SoundManager.instance
    }
}
// 怎么保证只产生一个
let soundManager = new SoundManager();
// 用管理类 都不会变 最简单的单例模式
SoundManager.Instance //代表属性这个会已经产生对象
// 第二种方法  节省内存 懒加载方法实现单例
soundManager.instance() //代表方法
代理模式
// 代理模式 做事的时候找一个代理人去做
//不同代理 结果可能不同 
// 类似 任务 ->多个赏金猎人 

// 写两个人计算
interface ICalc {
    calc(num1, num2): number

}

class Npc1 implements ICalc {
    calc(num1, num2) {
        return num1 + num2
    }
}

class Npc2 implements ICalc {
    calc(num1, num2) {
        return num1 - num2
    }
}

class Person {
    //定义一个属性 用哪个代理
    delegate: ICalc;
    // 计算数字
    getNum(num1, num2) {
        // 拿到num1和num2计算的结果 本身不计算 别人计算
        let num = this.delegate.calc(num1, num2)
        console.log(num + '')
    }
}

let person = new Person()
// 设定一个代理
person.delegate = new Npc1()
person.getNum(3, 4)
观察者模式
//观察者模式 很多对象监听一个对象的属性 状态 发生改变的时候会通知所有监听他的人
// 一天时间 变化 -> 玩家会自动拿手电,背景场景变色,敌人睡觉 一对多
// 协议
interface IOberver {
    nameChange(newName)
}

class Person {
    private _name: string
    //所有的观察者
    observers: Array<IOberver> = new Array < IOberver > ()

    set name(value) {
        this._name = value
        // 发生变化 遍历观察者数组,给所有的观察者发消息
        for (let observer of this.observers) {
            observer.nameChange(this.this._name)
        }
    }

    get name() {
        return this._name
    }
}

class Test implements IOberver {
    nameChange(newName) {
        console.log('监听变化名字变为', newName);
    }
}

let person = new Person()
let test = new Test()
// 设置为监听对象
person.obserbers.push(test)
person.name = '哈哈哈'
工厂模式
// 工厂模式 汽车工厂
// 我要一个奥迪 我要一个宝马 需求
enum CarType {
    Bmw,
    Audi,
    Benz
}
// 创建对象的模式
class Car {
    name: String;
    // 工厂方法 用另外有一种方式创建对象
    static Create(carType: CarType): Car {
        let car: Car
        switch (carType) {
            case CarType.Audi:
                car = new Audi()
                break;
            case CarType.Benz:
                car = new Benz()

                break;
            case CarType.Bmw:
                car = new Bmw()

                break;
        }
        return car
    }
}
class Bmw extends Car {

}
class Audi extends Car {

}
class Audi extends Car {

}
// 生成一个宝马
let bmw = Car.Create(CarType.Bmw)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值