Membro della classe dichiarato solo per essere passato ad un'altra classe

1

Dati tre classi:

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

    void doThings() {
        C* c = new C(b_);
        ...
        // Use c
    }
}

class B {}

class C {
    B* b_;
    C(B* b) {
        b_ = b;
        ...
    }
}

Il riferimento a B nella classe A è utile solo per passarlo a C quando necessario, perché A e C non può creare l'istanza di B .

Mi chiedo se potrei evitare di avere il riferimento in A usando un modello di progettazione: faccio non penso che fare B a singleton sia una buona soluzione e penso che una Factory potrebbe sii migliore, ma forse è una complicazione eccessiva.

Il riferimento inutilizzato è un problema reale? Una fabbrica risolve il mio problema?

    
posta Marco Stramezzi 02.03.2017 - 17:13
fonte

2 risposte

1

passa c nel costruttore per A

class A {
    C* c_;
    A(C* c){
        c_ = c;
    }

    void doThings() {
        ...
        // Use c_
    }
}

class C {
    B* b_;
    C(B* b) {
        b_ = b;
        ...
    }
}
    
risposta data 02.03.2017 - 18:00
fonte
1

Sembra che un'istanza di C debba essere un argomento del metodo doThings . C non è una dipendenza a livello di classe e _b funge solo da dipendenza a C , quindi qualcos'altro dovrebbe creare C e passarlo a doThings .

Dovrai perdonarmi, non ho scritto c ++ da ... università? La sintassi del puntatore / riferimento potrebbe essere un po 'off.

class A {
    A() { }

    void doThings(C* c) {
        // Use c
    }
};

class B { };

class C {
    B* _b;

    C(B* b) {
        _b = b;
    }
};

Qualcosa deve coordinare tra A , B e C :

class X {
    void doStuff() {
        B b;
        C c(&b);
        A a;

        a.doThings(&c);
    }
}
    
risposta data 02.03.2017 - 17:47
fonte

Leggi altre domande sui tag