ts中的设计模式

本文解析了单例模式在音频管理中的应用,介绍了代理模式通过代理对象实现间接操作,以及观察者模式如何通过监听内容变化。还涵盖了工厂模式快速生成对象和几种常见的设计模式如工厂、代理和观察者在实际编程中的应用。
摘要由CSDN通过智能技术生成
单列模式

整个应用只用实例化一次的类,常用于整个应用中的音频管理(比如游戏中的控制播放声音的操作)
无论调用多少次都只会初始化一次

class AudioManager {
	private static _instance = null;
	// 通过私有化构造函数让外界无法直接new
    private constructor() {
        console.log('初始化')
    }
	// 这个方法必须是静态方法
	public static Instance(){
		if(!AudioManager._instance){
			AudioManager._instance = new AudioManager()
		}
		return AudioManager._instance
	}
}
let audioManager = AudioManager.Instance()
AudioManager.Instance()
AudioManager.Instance()
AudioManager.Instance()
AudioManager.Instance()

或者

class AudioManager { 
    private static _instance;
    private constructor() {
        console.log("初始化")
    }
    static get instance() {
        if (!AudioManager._instance) {
            AudioManager._instance = new AudioManager()
        }
        return AudioManager._instance
    }
}
AudioManager.instance
代理模式

通过设置代理对象调用代理对象的方法去实现

interface ProxyObject { 
    calc(num1: number, num2: number): number;
}
class Person{
    constructor() {
        
    }
    proxyObject: ProxyObject;
    calc(num1: number, num2: number) {
       return this.proxyObject.calc(num1,num2)
    }
}
class Proxy1 implements ProxyObject{
    calc(num1: number, num2: number) {
        return num1 + num2
    }
}
class Proxy2 implements ProxyObject{
    calc(num1: number, num2: number) {
        return num1 * num2
    }
}
let person = new Person() 
person.proxyObject = new Proxy1()
console.log(person.calc(1, 6))
person.proxyObject = new Proxy2()
console.log(person.calc(1,6))

在这里插入图片描述

观察者模式

通过设置监听者在要监听的内容变化时触发内容

interface Observer{
    onMessage(message:string):void
}
class ChatRoom{
    // private _observerList: Array<Observer> = new Array<Observer>();
    private _observerList: Observer[] = new Array<Observer>();
    private _message: string;
    set message(str) {
        this._message = str
        for (let observer of this._observerList) {
            observer.onMessage(str)
        }
    }
    get message() {
       return this._message
    }
    addRoom(observer:Observer) {
        this._observerList.push(observer)
    }
}
class Item implements Observer {
    onMessage(message) {
        console.log(message)
    }
}
let chatRoom = new ChatRoom();
let item = new Item()
chatRoom.addRoom(item)
chatRoom.message = '监听'

工厂模式

为了更快捷生成对象


enum ColorType{
    'red',
    'green',
    'blue'
}

class Color{
    static createColor(colorType: ColorType) {
        let color:Color = null;
        switch (colorType) {
            case ColorType.red:
                color = new Red();
                break;
            case ColorType.green:
                color = new Green();
                break;
            case ColorType.blue:
                color = new Blue();
                break;
        }
        return color;
    }
}
class Red extends Color{ }
class Green extends Color{ }
class Blue extends Color{ }
console.log(Color.createColor(ColorType.red))
console.log(Color.createColor(ColorType.green))
console.log(Color.createColor(ColorType.blue))

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值