Sto leggendo il libro di Josh Bloch Java efficace e suggerisce di utilizzare un modello di progettazione del builder quando si creano oggetti con grandi quantità di membri. Da quello che riesco a vedere, non è il motivo di design alla vaniglia, ma sembra la sua variazione. Mi piace piuttosto l'aspetto e stavo cercando di usarlo in un'applicazione web C# che sto scrivendo. Questo è il codice scritto in Java e funziona perfettamenteIn che modo la nozione di statica di Java è diversa da quella di C#?
public class Property {
private String title;
private String area;
private int sleeps = 0;
public static void main(String[] args) {
Property newProperty = new Property.Builder("Test Property").Area("Test Area").Sleeps(7).build();
}
private Property(Builder builder) {
this.title = builder.title;
this.area = builder.area;
this.sleeps =builder.sleeps;
}
public static class Builder{
private String title;
private String area;
private int sleeps = 0;
public Builder (String title){
this.title = title;
}
public Builder Area(String area){
this.area = area;
return this;
}
public Builder Sleeps(int sleeps){
this.sleeps = sleeps;
return this;
}
public Property build() {
return new Property(this);
}
}
}
Quando ho messo questo in quello che penso è il C# equivalente
public class Property
{
private String title;
private String area;
private Property(Builder Builder)
{
title = Builder.title;
area = Builder.area;
}
public static class Builder
{
// Required parameters
private String title;
private String area;
// Optional parameters
private int sleeps = 0;
public Builder(String val)
{
this.title = val;
}
public Builder Area(String val)
{
this.area = val;
return this;
}
public Builder Sleeps(int val)
{
this.sleeps = val;
return this;
}
public Property build()
{
return new Property(this);
}
}
}
poi mi avvisi del compilatore. Molti di questi "non possono dichiarare membri di istanze in una classe statica".
Quindi la mia domanda è in primo luogo cosa mi sono perso? Se mi sono perso qualcosa, posso farlo nel modo in cui Josh Bloch consiglia, ma in C#, e infine, e anche questo importante, è sicuro per i thread?
Che "versione": P hai di Java efficace? Ne ho uno vecchio e non copre Builder. Ho letto che era uno dei nuovi capitoli aggiunti dopo Josh experience @ Google. – OscarRyz