Questa 'implementazione' di un builder è un buon design

0
public class MyButton{
    public MyButton(){}
    public MyButton setIcon(Icon icon){return this;}
    public MyButton setText(String text){return this;}
}

E usato come:

MyButton testButton = new MyButton()
    .setIcon(MyIcon)
    .setText("MyText");

So che non è una vera implementazione del modello di builder, ma c'è qualcosa di intrinsecamente sbagliato in questo design?

    
posta Rulasmur 30.11.2015 - 09:43
fonte

3 risposte

1

Come menzionato da @COMEFROM questa domanda ha risposto alla domanda perfettamente. Lo stile utilizzato qui è chiamato Fluent Interface . Questa risposta menziona una convenzione che è in linea con la convenzione standard di Java e non interferisce teoricamente con ottimizzazioni jvm e compatibilità javabean

    
risposta data 30.11.2015 - 13:17
fonte
3

È lo schema del costruttore? come spiegato da Euforic, no, non lo è. Un Builder è una classe separata che ha lo scopo di creare un'istanza di una diversa classe.

C'è qualcosa di sbagliato nella progettazione? Dipende. La tua applicazione consente pulsanti che non hanno un testo e / o un'icona? Se sì, allora questo schema è perfettamente accettabile. Se no, potresti prendere in considerazione la scrittura di una classe ButtonBuilder che genera un'eccezione (o almeno una assert ) quando chiami buttonBuilder.build() prima di impostare tutte le proprietà richieste.

    
risposta data 30.11.2015 - 13:05
fonte
2

La parte centrale del patter Builder è la parte di costruzione, non la parte di sintassi fluente.

Se la tua classe non sta costruendo un'altra classe, non dovrebbe essere chiamata builder.

Nel tuo caso, chiamerei "fluent property setting" o qualcosa di simile.

    
risposta data 30.11.2015 - 10:24
fonte

Leggi altre domande sui tag