Migliora la progettazione con pattern singleton

-2

Voglio creare uno strumento di gestione dei media, per il quale cerco di disegnare un diagramma di classe UML appropriato. Lo strumento deve contenere una raccolta di diversi tipi di media (film, musica, ecc.) Che ereditano da una classe media di base. Ogni mezzo ha inoltre attributi diversi (ad esempio interprete, direttore, ...). Ho intenzione di recuperare informazioni sui media online per integrare automaticamente gli attributi mancanti.

Attualmente sto pianificando di passare questa funzionalità a un modello di classe singleton aggiuntivo OnlineSynchronisation, a differenza del tipo di supporto, per prelevare dagli appositi attributi online gli appropriati attributi.

Questo schema ha senso o esiste un approccio migliore? Se esistesse solo un tipo di supporto, creerei OnlineSynchronisation solo con metodi statici, poiché non sono necessarie istanze individuali. Ma il metodo updateMedium deve essere adattato a fonti diverse (ad esempio, ottenere attributi da imdb.com, se il mezzo è un film).

Modifica Il modello strategico suggerito nei commenti di @CandiedOrange sembra promettente. In combinazione con la risposta e i commenti di @Bart, abbandonerò la mia intenzione di utilizzare il modello singleton

    
posta Jannek S. 26.11.2017 - 09:57
fonte

1 risposta

7

No, il tuo schema non ha senso.

Prima di tutto, non si presenta alcun argomento sul perché possa esserci sempre un'istanza di OnlineSynchronization . Questo è ciò che significa fare di una classe un Singleton. È un errore grave nella logica del programma se ci sono sempre più istanze di un Singleton.

In secondo luogo, le frecce nella progettazione non corrispondono agli attributi e alle operazioni nelle classi. Secondo le frecce, OnlineSynchronization conserva e gestisce le istanze Medium , ma secondo gli attributi, questo è il contrario (che è anche incoerente con l'uso di Singleton).

Lo schema che avrebbe senso per me è vicino a ciò che suggeriscono i tuoi attributi:

  • La classe (abstract) Medium contiene (possiede, composizione) un'istanza OnlineSynchronization .
  • Il pattern Singleton non viene utilizzato.
  • Esiste una gerarchia di classi SynchronizationSource per gestire le API fornite dalle varie origini.
risposta data 26.11.2017 - 11:28
fonte

Leggi altre domande sui tag