Identificazione del caso d'uso per l'istanziazione solo attraverso istanze esistenti

0

Ero nella mia classe CS quando il mio istruttore mi ha presentato le seguenti classi:

public class UninstantiableTest {

    private static Uninstantiable uninstantiable;

    public static void setUninstantiable(Uninstantiable used) {
        uninstantiable = used;
    }

    public static void main(String[] args) {
        Uninstantiable.setupUninsntatiableTest();
        Uninstantiable test = uninstantiable;
        for (int i = 0; i <= 100; i++) {
            test = test.new InstantiableWithOther(Integer.toString(i));
            System.out.println(test);
        }
    }

}

public class Uninstantiable {

    public static void setupUninsntatiableTest() {
        UninstantiableTest.setUninstantiable(new Uninstantiable());
    }

    private Uninstantiable() {}

    public class InstantiableWithOther extends Uninstantiable {

        private String string;

        public InstantiableWithOther(String string) {
            this.string = string;
        }

        public String toString() {
            return string;
        }

    }

}

Mi è stato quindi chiesto un probabile caso d'uso per un setup di classe come questo, al quale ho risposto "Per le applicazioni a cui desideri concedere i privilegi in modo selettivo passando oggetti", ma non sembrava soddisfatto di questa risposta.

Quali sono i casi d'uso (se esistono casi d'uso legittimi) per consentire l'istanziazione solo attraverso un'istanza esistente dello stesso tipo?

    
posta Addison Crump 20.05.2017 - 21:39
fonte

1 risposta

4

Ciò che questo schema sta facendo è utilizzare i modificatori di accesso sui costruttori per limitare i metodi di costruzione ai metodi di produzione che hanno un strong accoppiamento con altre classi che utilizzano l'iniezione setter. Perché ciò che sta facendo è davvero una supposizione di chiunque, ma offre un controllo sulla costruzione a scapito dell'accoppiamento. Trucchi simili sono usati dal modello singleton.

Come lo schema di singleton, questo modello sembra essere nato dalla paranoia. Il controllo sulla costruzione che si ottiene qui è di gran lunga superato dall'accoppiamento causato. Voglio dire, andiamo. Unsustainable deve SAPERE del suo test? Questo è veramente sbagliato.

Penso che l'unico uso pratico di questo codice sia mostrare alle persone che solo perché qualcosa di incredibilmente complicato non significa che sia buono. Forse è quello che il tuo istruttore voleva che tu vedessi.

Una volta sono stato rinchiuso in un angolo scrivendo qualcosa di molto simile a questo. Alla fine non riuscivo a sopportare l'accoppiamento e ho aperto il costruttore al livello del pacchetto, quindi almeno i miei metodi di produzione non dovevano tutti vivere nella stessa classe.

    
risposta data 20.05.2017 - 23:16
fonte

Leggi altre domande sui tag