Quale modello utilizzare per questo "costruttore"? Decoratore vs fabbrica?

0

Sto sviluppando un programma per generare caratteri LARP in java e ho avuto un problema.

Inizialmente avevo pianificato di utilizzare un decoratore per iterare attraverso i potenziali "ruoli" (effettivamente classi), e quindi da questo calcolare i costi per ogni abilità a seconda della combinazione dei ruoli e del negozio che nel personaggio. Potresti essere un Java Coder / Nerdfighter, se questi sono i tuoi due ruoli, o potresti semplicemente avere il ruolo SysAdmin ecc.

Quindi ho prototipato un metodo per acquistare un'abilità che richiedeva la ricerca di competenze in un database che conteneva il loro nome e il loro costo. Ecco l'intoppo: se ho valutato i costi, non ho mai bisogno di cercare il database, quindi nessuna modifica nel db viene trasferita (se l'abilità costa su un SysAdmin andare giù mi piacerebbe conoscere). Oltre a questo, potrei acquistare solo una minima parte delle competenze disponibili, quindi conserverò dati non necessari sui costi delle competenze e inoltre il personaggio dovrebbe solo conoscere le loro abilità, non tutte le abilità. Inoltre, il decoratore decorerebbe solo i costi delle abilità, nient'altro.

Invece ho bisogno di una fabbrica che abbia due opzioni per costruire il personaggio, qualcosa come:

public static CharacterFactory multiRolePlayerCharacter(Role firstRole, Role secondRole) {
    /*Some code goes here*/
}
public static CharacterFactory singleRolePlayerCharacter(Role role) {
    /*Some more code goes here*/    
}

Ma questo sembra molto meno estendibile rispetto al decoratore. Se il gioco dovesse mai cambiare in modo da poter multire il doppio più tardi (e Java Coder / Nerdfighter / SysAdmin è un ruolo consentito), allora ho bisogno di rielaborare dall'alto per aggiungere una nuova fabbrica. Inoltre non so come ogni fabbrica differisce inoltre forse da una bandiera per dire se è multiruolo o meno, e un'altra variabile per contenere il secondo. Che non sembra molto.

Quindi sembra che in entrambi i casi io perda: Decorator aggiunge estensibilità a lungo termine mentre metto a riposo le mie classi / oggetti, e Factory funzionerà per iniziare ma resisterà al cambiamento.

Quindi come faccio a sapere quale scegliere? C'è un modo per combinare i due?

    
posta Pureferret 16.07.2012 - 16:25
fonte

1 risposta

3

Hai bisogno di una classe di caratteri che possa contenere un elenco di ruoli. Aggiungi ruoli al costruttore (o ovunque) utilizzando un array, così non sarai mai limitato. Potresti anche avere un metodo addRole in modo da poter aggiungere ruoli in seguito. (E rimuoverli? Un Guerriero anziano potrebbe pensare seriamente a diventare un Mago o anche un Contabile.Queste spade diventano pesanti quando sei più grande.) (Nota Trivia: a volte viene chiamata "Dipendenza da Iniezione".)

Gestire un elenco di lunghezza arbitraria è un po 'più difficile che gestire un solo oggetto, ma sai che devi farlo. A volte, ci sono solo tre numeri, "zero", "uno" e "molti". "Due" è davvero solo "molti".

    
risposta data 16.07.2012 - 18:30
fonte

Leggi altre domande sui tag