Recentemente mi sono imbattuto in un modello di builder che mi ha incuriosito.Logic inside BuilderPattern
Quindi, ho uno EntityBuilder
che crea un Entity
, ma non restituisce l'entità. Qui è la firma del metodo:
public void build();
Invece, all'interno del metodo build()
, si batte il nuovo oggetto creato, il Entity
, a un'istanza CacheImplementation
per memorizzarlo. Nota: il CacheImpl
viene iniettato nel costruttore del costruttore.
public void build(){
//create new entity
cacheImplementation.add(entity);
}
Questo suona come la migliore pratica?
Successivamente modificare 0
public interface EntityBuilder {
void setProperty0(PropertyObject propertyObject0);
void setProperty1(PropertyObject propertyObject1);
void setProperty2(PropertyObject propertyObject2);
//...
void build();
}
public class EntityBuilderImpl implements EntityBuilder {
PropertyObject propertyObject0;
PropertyObject propertyObject1;
PropertyObject propertyObject2;
//...
// setters for all properties
@Override
public void build(){
//create new entity
cacheImplementation.add(entity);
}
}
Il costruttore viene utilizzato nel modo seguente:
public class EntityProcessor{
private EntityBuilderFactory entityBuilderFactory;//initialized in constructor
void process(EntityDetails entityDetails){
EntityBuilder entityBuilder = this.entityBuilderFactory.getNewEntitytBuilder();
//..
// entityBuilder.set all properties from entityDetails
entityBuilder.build();
}
}
Nota: l'istanza CacheImpl memorizza solo le entità in un List<>
che è accessi ogni n secondi.
Variazioni di schemi di progettazione tradizionali suona bene. Ho aggiunto un piccolo snippet di codice per vedere cosa intendevo. Basta questo per giudicare? – VladLucian
No, non abbastanza. La parte più interessante sarà l'uso del builder e della cache. Btw una lista come una cache suona strana. Mi aspettavo una mappa. – janos
Non è un elenco, è un Set cancellato in N secondi, ogni volta che inizia l'elaborazione. Ho modificato di nuovo il modo in cui viene utilizzato il builder. – VladLucian