Esiste un nome per un "modello singleton a più istanze" - restituisce un riferimento per un oggetto con valore uguale?

2

Ho il compito di scrivere un assemblatore in C, che si presta abbastanza bene in alcuni scenari di progettazione, e in una fase di analisi, dopo la tokenizzazione, ho bisogno di "compilare" alcune informazioni che prima erano state ignorate dalla tokenizzazione .

Salterò i dettagli, ma il modo in cui ho pensato di risolvere questo è di avere una sola istanza di un oggetto (concretamente, una struttura) che è uguale a un altro. Ad esempio, dato:

typedef struct {
    unsigned int day, month, year;
} day;
...

day *a = singleton_day(9, 3, 1999), *b = singleton_day(9, 3, 1999);

a e b saranno puntatori alla stessa posizione di memoria, poiché sono stati istanziati con valori identici.

Questa tecnica avrà un impatto positivo sullo spazio e sulle prestazioni algoritmiche del mio codice, ma non so come chiamare i primitivi di istanziazione. Mi piacerebbe ispirare un presunto modello di design, ma non so se esiste o se dovrei inventarne uno.

    
posta Acsor 18.11.2018 - 20:46
fonte

1 risposta

1

Il termine singleton non è appropriato per ciò che stai cercando di trasmettere. Una parola molto migliore è "unica". Vuoi ottenere un riferimento univoco a una classe di valore.

La classe value ha solo membri con valore costante. Ciò significa che due istanze della classe di valore che hanno gli stessi membri verranno sempre confrontate come uguali. Poiché sono sempre uguali, anche i riferimenti ad essi devono essere uguali.

Una factory crea un'istanza della classe value se non esiste un'istanza precedente della classe o restituisce un riferimento all'istanza precedente.

Esistono numerosi metodi per la gestione delle istanze utilizzate dalla fabbrica. Un esempio comune è l'utilizzo di una mappa hash dai valori dei campi all'istanza univoca. Tuttavia, qualsiasi metodo di memorizzazione nella cache farà il lavoro.

    
risposta data 23.11.2018 - 19:43
fonte

Leggi altre domande sui tag