싱글톤 데코레이터

TypeScript에서 데코레이터를 사용하여 싱글톤 패턴을 적용하는 것이 실제로 가능하다는 것이 밝혀졌습니다.

데코레이터는 기본적으로 래퍼 함수이므로 이를 사용하여 가짜 익명 클래스를 반환하고 해당 생성자를 사용할 수 있습니다.
데코레이트된 클래스의 인스턴스를 클로저 변수에 가두어 나중에 누군가 호출하려고 할 때 재사용할 수 있습니다.
클래스 생성자 다시:

function Singleton<T extends new (...args: any[]) => any>(ctr: T): T {

    let instance: T;

    return class {
        constructor(...args: any[]) {

            if (instance) {
                console.error('You cannot instantiate a singleton twice!');
                return instance;
            }

            instance = new ctr(...args);
            return instance;
        }
    } as T
}


이제 이를 사용하여 모든 클래스를 장식하여 싱글톤으로 만들 수 있습니다.

@Singleton
class User {
    constructor(private name: string) { }

    public sayName(): void {
        console.log(`My name is ${this.name}`);
    }
}

let user = new User("Bob");
let secondUser = new User("not Bob");
user.sayName(); // "Bob"
secondUser.sayName(); // still "Bob"


Playground

흥미롭죠?

좋은 웹페이지 즐겨찾기