Builder: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto"
 
(5 versioni intermedie di 5 utenti non mostrate)
Riga 12:
 
== Struttura di un Builder ==
* '''Builder''': specifica l'interfacciala classe astratta che crea le parti dell'oggetto Product.
* '''ConcreteBuilder''': costruisce e assembla le parti del prodotto implementando l'interfaccia Builder; definisce e tiene traccia della rappresentazione che crea.
* '''Director''': costruisce un oggetto utilizzando l'interfaccia Builder.
Riga 21:
 
== Funzionamento ==
Il Client crea un oggetto Director e lo configura con gli oggetti Builder desiderati. Il Director notifica al Builder se una parte del prodotto deve essere costruita, il Builder riceve le richieste dal Director e aggiunge le parti al prodotto. Il Client riceve il prodotto dal Builder tramite il Director.
 
Questo consente di variare la rappresentazione interna del prodotto, isolare il codice per la costruzione e la rappresentazione e controllare in modo preciso il processo di costruzione.
Riga 29:
* In genere, il design procede nel modo seguente: parte utilizzando il pattern Factory Method (meno complicato, più customizzabile, ma che genera una proliferazione di sottoclassi) ed evolve verso Abstract Factory, Prototype, oppure Builder (più flessibili, più complessi) nel momento in cui il progettista scopre la necessità di una maggiore flessibilità.
* Spesso i pattern creazionali sono complementari: Builder può infatti utilizzare uno degli altri pattern per implementare le componenti che deve costruire. Abstract Factory, Builder, e Prototype possono utilizzare il Singleton nelle loro implementazioni.
<syntaxhighlight lang="java" line="1">
 
/** "Prodotto" */
class Pizza {
class Pizza
private String dough = "";
{
private String doughsauce = "";
private String saucetopping = "";
public void private setDough(String toppingdough) ={ "";
this.dough = dough;
}
public void setSauce(String sauce) {
this.sauce = sauce;
}
public void setDough(String dough) {
public void setTopping(String topping) {
this.dough = dough;
}this.topping = topping;
}
}
public void setSauce(String sauce) {
</syntaxhighlight><syntaxhighlight lang="java" line="1">
this.sauce = sauce;
/** "Abstract Builder" */
}
abstract class PizzaBuilder {
public void setTopping(String topping) {
protected Pizza pizza;
this.topping = topping;
public Pizza getPizza() { }
return pizza;
}
}
 
public void createNewPizzaProduct() {
/** "Abstract Builder" */
pizza = new Pizza();
abstract class PizzaBuilder
{ }
public abstract void buildDough();
protected Pizza pizza;
public abstract void buildSauce();
public abstract void buildTopping();
public Pizza getPizza() {
}
return pizza;
</syntaxhighlight><syntaxhighlight lang="java" line="1">
}
/** "ConcreteBuilder" */
class HawaiianPizzaBuilder extends PizzaBuilder {
public void createNewPizzaProduct() {
public void pizza = new PizzabuildDough(); {
}pizza.setDough("cross");
}
public abstract void buildDoughbuildSauce(); {
public abstract void buildSaucepizza.setSauce("mild");
}
public abstract void buildTopping(); {
pizza.setTopping("ham+pineapple");
}
}
 
}
/** "ConcreteBuilder" */
</syntaxhighlight><syntaxhighlight lang="java">
class HawaiianPizzaBuilder extends PizzaBuilder {
/** "ConcreteBuilder" */
class SpicyPizzaBuilder extends PizzaBuilder {
public void buildDough() {
public void buildDough() {
pizza.setDough("cross");
}pizza.setDough("pan baked");
}
public void buildSauce() {
pizza.setSauce("mildhot");
}
public void buildTopping() {
pizza.setTopping("pepperoni+salami");
public void buildTopping() {
}
pizza.setTopping("ham+pineapple");
}
}
</syntaxhighlight><syntaxhighlight lang="java" line="1">
}
/** "Director" */
 
class Cook {
/** "ConcreteBuilder" */
class SpicyPizzaBuilder extends PizzaBuilder {
private PizzaBuilder pizzaBuilder;
public void buildDough() {
public void pizza.setDoughsetPizzaBuilder("panPizzaBuilder baked"pb); {
} pizzaBuilder = pb;
}
public void buildSauce() {
public Pizza pizza.setSaucegetPizza("hot"); {
return pizzaBuilder.getPizza();
}
}
public void buildTopping() {
public void constructPizza() {
pizza.setTopping("pepperoni+salami");
pizzaBuilder.createNewPizzaProduct();
}
pizzaBuilder.buildDough();
}
pizzaBuilder.buildSauce();
 
pizzaBuilder.buildTopping();
/** "Director" */
class Cook { }
}
</syntaxhighlight><syntaxhighlight lang="java" line="1">
private PizzaBuilder pizzaBuilder;
/** A given type of pizza being constructed. */
class BuilderExample {
public void setPizzaBuilder(PizzaBuilder pb) {
public static void main(String[] args) {
pizzaBuilder = pb;
}Cook cook = new Cook();
PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder();
PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder();
public Pizza getPizza() {
cook.setPizzaBuilder( hawaiianPizzaBuilder );
return pizzaBuilder.getPizza();
}cook.constructPizza();
Pizza pizza = cook.getPizza();
public void constructPizza() {
pizzaBuilder.createNewPizzaProduct();
pizzaBuilder.buildDough();
pizzaBuilder.buildSauce();
pizzaBuilder.buildTopping();
}
}
 
/** A given type of pizza being constructed. */
class BuilderExample {
public static void main(String[] args) {
Cook cook = new Cook();
PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder();
PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder();
cook.setPizzaBuilder( hawaiianPizzaBuilder );
cook.constructPizza();
Pizza pizza = cook.getPizza();
}
}
}
</syntaxhighlight>
 
==Bibliografia==
Riga 142 ⟶ 128:
 
== Altri progetti ==
{{interprogetto|commons|preposizione=sul}}
 
==Collegamenti esterni==
*Dai costruttori al Builder Pattern in Java [http://www.cosenonjaviste.it/dai-costruttori-al-builder-pattern-in-java/] {{Webarchive|url=https://web.archive.org/web/20130211093018/http://www.cosenonjaviste.it/dai-costruttori-al-builder-pattern-in-java/ |date=11 febbraio 2013 }} articolo su http://www.cosenonjaviste.it {{Webarchive|url=https://web.archive.org/web/20121215020728/http://www.cosenonjaviste.it/ |date=15 dicembre 2012 }}
 
{{Design Patterns patternspattern}}
{{Portale|informatica}}
 
[[Categoria:Design pattern]]