Есть ли более подходящее решение проблемы с созависимостью 2 классов?

Есть ситуация, где один класс хранит в себе поля 2 экземпляров классов, которые передаются друг другу в конструкторе, от чего ни один ни второй создать не выходит:

class A{
    private readonly _instance: B;

    constructor(instance: B){
        this._instance = instance;
    }
}

class B{
    private readonly _instance: A;

    constructor(instance: A){
        this._instance = instance;
    }
}

class C{
    private readonly _a: A;
    private readonly _b: B;

    constructor(){
        // this._a = new A(this._b)
        // this._b = new B(this._a)
    }
}

Чтобы создать экземпляр класса A, нужно прежде создать экземпляр класса B, который в свою очередь требует экземпляр класса A и так по кругу.

Есть такой вариант решения:

class A{
    private readonly _instanceCallback: () => B;

    constructor(instanceCallback: () => B){
        this._instanceCallback = instanceCallback;
    }

    private get _instance(): B{
        return this._instanceCallback();
    }
}

class B{
    private readonly _instanceCallback: () => A;

    constructor(instanceCallback: () => A){
        this._instanceCallback = instanceCallback;
    }

    private get _instance(): A{
        return this._instanceCallback();
    }
}

class C{
    private readonly _a: A;
    private readonly _b: B;

    constructor(){
        this._a = new A(() => this._b)
        this._b = new B(() => this._a)
    }
}

Только такое решение вызывает сомнения. Возможно есть какие-то ещё варианты


Ответы (0 шт):