ts中的设计模式

单列模式

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

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))

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhoulib__/article/details/123336924