Posso creare un metodo Factory che contenga un riferimento interno a un'istanza di B?

3

Considerate due classi:

class A {
    B* b_;
    A(B* b){
        b_ = b;
    }
}

class B {}

B è una classe che dovrebbe essere utilizzata solo all'interno di A , quindi vorrei non per esporre la sua creazione a qualsiasi classe utilizzi A . Inoltre, B dovrebbe not essere creato ogni volta che è necessaria un'istanza di A (ha un'inizializzazione lenta).

Dato che mi piacerebbe riutilizzare la stessa istanza di B , ma non ho davvero bisogno di renderlo Singleton , potrebbe essere una buona idea creare una Factory che contiene un riferimento interno a un'istanza di B ?

Qualcosa come:

class Factory {
    B* b_;
    A* createA() {
        if(b_ == NULL)
            b_ = new B();
        return new A(b_);
    }
}

Il mio dubbio è che non trovo nulla di utile su google per "stateful factory" e forse trascuro qualche inconveniente in questo approccio.

    
posta Marco Stramezzi 03.03.2017 - 09:22
fonte

1 risposta

1

In un ambiente multi-thread, potresti avere più istanze di B create simultaneamente. Oltre a questo, il tuo design risolve tutti i tuoi requisiti con la minor quantità di codice. In generale, i singleton complicano il multi-threading in futuro.

Non lo chiamerei fabbrica. È un'istanza riutilizzabile pigramente inizializzata.

    
risposta data 03.03.2017 - 15:28
fonte

Leggi altre domande sui tag