Építő (tervezési minta)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2014. november 23-án felülvizsgált verziótól ; az ellenőrzések 30 szerkesztést igényelnek .
Építész
Építész
Típusú Generálás
profik

Lehetővé teszi a termék belső megjelenítésének módosítását. Elszigeteli a felépítést és megjelenítést megvalósító kódot.

Finomabban irányítja az építési folyamatot, mint más generatív minták
Kapcsolódó sablonok Absztrakt gyár , Linker
Leírása: Tervezési minták Igen

Builder – A generatív  tervezési minta módot biztosít összetett objektumok létrehozására.

Cél

Elválasztja egy összetett objektum felépítését a reprezentációjától, így ugyanaz az építési folyamat különböző ábrázolásokat eredményezhet.

Előnyök

Hátrányok

Alkalmazás

A COM -ban található Moniker objektumok olyan Builderek, amelyek karakterlánccal inicializálódnak. Sőt, létrehozásukhoz egy másik Builder-t használnak - az MkParseDisplayNameEx-et, amely meghatározza a moniker osztályt a karakterláncból, létrehozza a monikert, és ugyanazzal a karakterlánccal inicializálja.

Ezen objektumok egyike, az URL Moniker, minden oldal, melléklet és dokumentum betöltésére használatos a Microsoft Internet Explorer programban.

Példák

Java

Java forrás /** "Termék" */ class Pizza { private String tészta = "" ; private String souse = "" ; private String topping = "" ; public void setDough ( String tészta ) { this . tészta = tészta ; } public void setSauce ( String souse ) { this . szósz = szósz ; } public void setTopping ( String topping ) { this . feltét = feltét ; } } /** "Abstract Builder" */ abstract class PizzaBuilder { protected Pizza pizza ; public Pizza getPizza () { return pizza ; } public void createNewPizzaProduct () { pizza = new Pizza (); } public abstract void buildDough (); public abstract void buildSauce (); public abstract void buildTopping (); } /** "ConcreteBuilder" */ class HawaiianPizzaBuilder kiterjeszti PizzaBuilder { public void buildDough () { pizza . setDough ( "kereszt" ); } public void buildSauce () { pizza . setSauce ( "enyhe" ); } public void buildTopping () { pizza . setTopping ( "sonka+ananász" ); } } /** "ConcreteBuilder" */ class SpicyPizzaBuilder kiterjeszti PizzaBuilder { public void buildDough () { pizza . setDough ( "serpenyőben sült" ); } public void buildSauce () { pizza . setSauce ( "forró" ); } public void buildTopping () { pizza . setTopping ( "pepperoni+szalámi" ); } } /** "Director" */ class Pincér { privát PizzaBuilder pizzaBuilder ; public void setPizzaBuilder ( PizzaBuilder pb ) { pizzaBuilder = pb ; } public Pizza getPizza () { return pizzaBuilder . getPizza (); } public void constructPizza () { pizzaBuilder . CreateNewPizzaProduct (); pizza Builder . buildDough (); pizza Builder . buildSauce (); pizza Builder . buildTopping (); } } /** Pizzát rendelő vásárló. */ public class BuilderExample { public static void main ( String [] args ) { Pincér = new Pincér ( ); PizzaBuilder hawaiianPizzaBuilder = új HawaiianPizzaBuilder ( ); pincér . setPizzaBuilder ( hawaiianPizzaBuilder ); pincér . constructPizza (); Pizza pizza = pincér . getPizza (); } }


Java forrás // pattern Builder public class NutritionFacts { private final int servingSize ; magán végső int adagok ; privát végső int kalória ; privát végső int zsír ; magán végső int nátrium ; privát végső int szénhidrát ; public static class Builder { // Kötelező paraméterek private final int servingSize ; magán végső int adagok ; // További paraméterek - alapértelmezett értékekkel inicializálva privát int kalória = 0 ; privát int zsír = 0 ; privát int szénhidrát = 0 ; privát int nátrium = 0 ; public Builder ( int servingSize , int servings ) { this . servingSize = servingSize ; ezt . adagok = adagok ; } public Builder kalória ( int val ) { kalória = val ; ezt visszaküldeni ; } public Builder fat ( int val ) { fat = val ; ezt visszaküldeni ; } public Builder szénhidrát ( int val ) { szénhidrát = val ; ezt visszaküldeni ; } public Builder sodium ( int val ) { nátrium = val ; ezt visszaküldeni ; } public NutritionFacts build () { return new NutritionFacts ( this ); } } private NutritionFacts ( Builder builder ) { servingSize = builder . adagméret ; adagok = építő . adagok ; kalória = építő . kalória ; kövér = építő . zsír ; nátrium = építő . nátrium ; szénhidrát = építő . szénhidrát ; } } // használat NutritionFacts cocaCola = new NutritionFacts . építő ( 240 , 8 ) . kalória ( 100 ) . nátrium ( 35 ) . szénhidrát ( 27 ) . épít ();


scala

Scala forráskód package.com _ csomag objektumkészítő { _ osztály pizza { private var tészta : String = "" private var szósz : String = "" private var topping : String = "" def setDough ( tészta : String ) : Egység = { ez . tészta = tészta _ def setSauce ( szósz : String ) : Unit = { this . szósz = szósz _ def setTopping ( topping : String ) : Unit = { this . feltét = feltét } def outputReceipt () : Egység = { println ( s"Tészta: $ tészta \nszósz: $ szósz \nöntet: $ öntet " ) } } abstract class AbstractPizzaBuilder { védett var pizza : Opció [ Pizza ] = Nincs def getPizza : Opció [ Pizza ] = pizza def createPizza () : Egység = { pizza = Néhány ( új pizza ) } def buildDough () : egység def buildSauce () : egység def buildTopping () : egység } class HawaiianPizzaBuilder kiterjeszti AbstractPizzaBuilder { def buildDough () felülírása : Unit = { pizza . kap . setDough ( "kereszt" ) } override def buildSauce () : Unit = { pizza . kap . setSauce ( "enyhe" ) } override def buildTopping () : Unit = { pizza . kap . setTopping ( "sonka+ananász" ) } } class SpicyPizzaBuilder kiterjeszti AbstractPizzaBuilder { def buildDough () felülírása : Unit = { pizza . kap . setDough ( "serpenyőben sült" ) } override def buildSauce () : Unit = { pizza . kap . setSauce ( "forró" ) } override def buildTopping () : Unit = { pizza . kap . setTopping ( "paprika+szalámi" ) } } osztály pincér { private var pizzaBuilder : Opció [ AbstractPizzaBuilder ] = Nincs def setPizzaBuilder ( pizzaBuilder : AbstractPizzaBuilder ) : Unit = { this . pizzaBuilder = Néhány ( pizzaBuilder ) println ( s" A ${ pizzaBuilder . getClass . getName } építő alapértelmezettként be van állítva" ) } def createPizza () : Pizza = { pizzaBuilder . kap . createPizza () pizzaBuilder . kap . buildDough () pizzaBuilder . kap . buildSauce () pizzaBuilder . kap . buildTopping () pizzaBuilder . kap . getPizza . kap } } objectBuilderTest { _ def main ( args : Array [ String ]) : Unit = { val pincér = new Waiter println ( "Kimenet:" ) pincér . setPizzaBuilder ( új HawaiianPizzaBuilder ) pincér . CreatePizza (). outputReceipt () pincér . setPizzaBuilder ( új SpicyPizzaBuilder ) pincér . CreatePizza (). kimeneti nyugta () } } } // Kimenet: // A Builder com.builder.package$HawaiianPizzaBuilder alapértelmezettként van beállítva // Tészta: kereszt // Szósz: enyhe // Feltöltés: sonka+ananász // A Builder com.builder.package$SpicyPizzaBuilder van beállítva alapértelmezettként / / Tészta: serpenyőben sült // Szósz: forró // Felöntés: pepperoni+szalámi

C#

Forrásszöveg C# nyelven a rendszer használatával ; a System.Collections.Generic használatával ; namespace Builder { public class MainApp { public static void () { // Rendező és építők létrehozása Director director = new Director (); Builder b1 = új ConcreteBuilder1 (); Builder b2 = új ConcreteBuilder2 (); // Két termékigazgató szerkesztése . Konstrukció ( b1 ); Termék p1 = b1 . GetResult (); p1 . show (); igazgató . Konstrukció ( b2 ); Termék p2 = b2 . GetResult (); p2 . show (); // Várja meg a felhasználói konzolt . olvasni (); } } // "Rendező" class Director { // A Builder összetett lépéssorozatot használ public void Construct ( Builder builder ) { builder . BuildPart (); építő . BuildPartB (); } } // "Építő" abstract class Builder { public virtual void BuildPartA (){} public virtual void BuildPartB (){} public abstract Product GetResult (); } // "ConcreteBuilder1" class ConcreteBuilder1 : Builder { privát , csak olvasható Termék termék = új termék (); public override void BuildPartA () { termék . Add ( "A rész" ); } public override void BuildPartB () { termék . Add ( "PartB" ); } public override Product GetResult () { return product ; } } // "ConcreteBuilder2" class ConcreteBuilder2 : Builder { privát , csak olvasható Termék termék = új termék (); public override void BuildPartA () { termék . Add ( "PartX" ); } public override void BuildPartB () { termék . Add ( "Party" ); } public override Product GetResult () { return product ; } } // "Termék" class Termék { privát , csak olvasható Lista < string > részek = new Lista < string >(); public void Add ( string part ) { parts . Hozzáadás ( rész ); } public void Megjelenítés () { Konzol . WriteLine ( "\nTermékrészek -------" ); foreach ( string rész részenként ) Konzol . _ WriteLine ( rész ); } } }

C++

Forrásszöveg C++ nyelven // Megvalósítás C++ nyelven. #include <iostream> #include <memória> #include <karakterlánc> // Termékosztály Pizza { privát : std :: szál tészta ; std :: húrszósz ; _ std :: string topping ; nyilvános : Pizza () { } ~ Pizza () { } void SetDough ( const std :: string & d ) { tészta = d ; } void SetSauce ( const std :: string & s ) { souse = s ; } void SetTopping ( const std :: string & t ) { topping = t ; } érvénytelen ShowPizza () { std :: cout << "fincsi!!!" << std :: endl << "Pizza tésztával mint" << tészta << ", Szósz mint " << szósz << "és Feltöltés mint" << feltöltés << "!!!" << std :: endl ; } }; // Abstract Builder osztály PizzaBuilder { védett : std :: shared_ptr < Pizza > pizza ; nyilvános : PizzaBuilder () {} virtuális ~ PizzaBuilder () {} std :: shared_ptr < Pizza > GetPizza () { return pizza ; } void createNewPizzaProduct () { pizza . reset ( új Pizza ); } virtuális void buildDough () = 0 ; virtual void buildSauce () = 0 ; virtuális void buildTopping () = 0 ; }; // ConcreteBuilder osztály HawaiianPizzaBuilder : nyilvános PizzaBuilder { nyilvános : HawaiianPizzaBuilder () : PizzaBuilder () {} ~ HawaiianPizzaBuilder (){} void buildDough () { pizza -> SetDough ( "kereszt" ); } void buildSauce () { pizza -> SetSauce ( "enyhe" ); } void buildTopping () { pizza -> SetTopping ( "sonka és ananász" ); } }; // ConcreteBuilder osztály SpicyPizzaBuilder : nyilvános PizzaBuilder { nyilvános : SpicyPizzaBuilder () : PizzaBuilder () {} ~ SpicyPizzaBuilder () {} void buildDough () { pizza -> SetDough ( "serpenyőben sült" ); } void buildSauce () { pizza -> SetSauce ( "forró" ); } void buildTopping () { pizza -> SetTopping ( "pepperoni és szalámi" ); } }; // Rendező osztály Pincér { privát : PizzaBuilder * pizzaBuilder ; nyilvános : Pincér () : pizzaBuilder ( nullptr ) {} ~ Pincér () { } void SetPizzaBuilder ( PizzaBuilder * b ) { pizzaBuilder = b ; } std :: shared_ptr < Pizza > GetPizza () { return pizzaBuilder -> GetPizza (); } érvénytelen ConstructPizza () { pizzaBuilder -> CreateNewPizzaProduct (); pizzaBuilder -> buildDough (); pizzaBuilder -> buildSauce (); pizzaBuilder -> buildTopping (); } }; // Az ügyfél két pizzát rendel. int main () { Pincér pincér ; HawaiianPizzaBuilder hawaiianPizzaBuilder ; pincér . SetPizzaBuilder ( & hawaiianPizzaBuilder ); pincér . ConstructPizza (); std :: shared_ptr < Pizza > pizza = pincér . GetPizza (); pizza -> ShowPizza (); SpicyPizzaBuilder spicyPizzaBuilder ; pincér . SetPizzaBuilder ( & spicyPizzaBuilder ); pincér . ConstructPizza (); pizza = pincér . GetPizza (); pizza -> ShowPizza (); return EXIT_SUCCESS ; }

JavaScript

JavaScript forráskód // Termékfüggvény Pizza ( ) { var duplicate = this ; // állandó hivatkozás a példányosított objektumra, amelyet minden this var tészta esetén meg kell hívni ; var szósz ; var öntet ; ezt . setDough = function ( val ) { tészta = val ; }; ezt . setSauce = function ( val ) { mártás = val ; }; ezt . setTopping = function ( val ) { topping = val ; }; // a nyelv természetéből adódóan a gettereket (még ha nincs is rájuk szükségünk) // ugyanabban a függvényben kell definiálni, mint a this . getDough = function () { return tészta ; }; ezt . getSauce = function () { return szósz ; }; ezt . getTopping = function () { return topping ; }; // Létre kell hoznunk egy metódust, ami megváltoztatja egy már létrehozott objektum tulajdonságait // (lásd createNewPizzaProduct) ez . clear = function () { duplicate . setDough ( undefined ); másodpéldány . setSauce ( undefined ); másodpéldány . setTopping ( undefined ); }; } // Abstract Builder function PizzaBuilder () { var pizza = new Pizza (); ezt . getPizza = function () { return pizza ; }; ezt . createNewPizzaProduct = function () { // ha csak a pizza változó értékét változtatjuk meg, akkor a változás // semmilyen módon nem érinti a gyermekosztályokat, mert bennük a változó pizza // a "régi" memóriaterületre utal . tiszta (); // ha a megvalósításokon belül (HawaiianPizzaBuilder, SpicyPizzaBuilder) // a pizza változó helyett a getPizza metódust használjuk, // akkor a // pizza = new Pizza(); // és a Pizzának nem lesz szüksége az egyértelmű metódusra }; ezt . buildDough = function ( val ) { }; ezt . buildSauce = function ( val ) { }; ezt . buildTopping = function ( val ) { }; } // ConcreteBuilder function HawaiianPizzaBuilder () { PizzaBuilder . hívja ( ezt ); var pizza = ez . getPizza (); // védett szimuláció ezt . buildDough = function () { pizza . setDough ( "kereszt" ); }; ezt . buildSauce = function () { pizza . setSauce ( "enyhe" ); }; ezt . buildTopping = function () { pizza . setTopping ( "sonka+ananász" ); }; } function SpicyPizzaBuilder () { PizzaBuilder . hívja ( ezt ); var pizza = ez . getPizza (); ezt . buildDough = function () { pizza . setDough ( "serpenyőben sült" ); }; ezt . buildSauce = function () { pizza . setSauce ( "forró" ); }; ezt . buildTopping = function () { pizza . setTopping ( "pepperoni+szalámi" ); }; } // Irányító függvény Pincér () { var pizzaBuilder ; ezt . setPizzaBuilder = function ( builder ) { pizzaBuilder = builder ; }; ezt . getPizza = function () { return pizzaBuilder . getPizza (); }; ezt . constructPizza = function () { pizzaBuilder . CreateNewPizzaProduct (); pizza Builder . buildDough (); pizza Builder . buildSauce (); pizza Builder . buildTopping (); }; } // Az ügyfél két pizzát rendel var pizza ; var pincér = new Pincér (); var hawaiianPizzaBuilder = új HawaiianPizzaBuilder (); pincér . setPizzaBuilder ( hawaiianPizzaBuilder ); pincér . constructPizza (); pizza = pincér . getPizza (); figyelmeztetés ( pizza . getDough () + ", " + pizza . getSauce () + ", " + pizza . getTopping () ); var spicyPizzaBuilder = új SpicyPizzaBuilder (); pincér . setPizzaBuilder ( spicyPizzaBuilder ); pincér . constructPizza (); pizza = pincér . getPizza (); figyelmeztetés ( pizza . getDough () + ", " + pizza . getSauce () + ", " + pizza . getTopping () );

Python

Forráskód Pythonban #kódolás: utf-8 osztály Állat : """ Absztrakt állat """ lábak = 0 farok = hamis ordítás = '' osztály Mutátor : """ Reprodukcióért felelős """ def mute ( self ): self . állat = Állat () class Cat ( Mutátor ): """ Cat """ def create_legs ( self ): self . állat . lábak = 4 def create_tail ( self ): self . állat . farok = Igaz def create_roar ( self ): self . állat . üvölt = 'meowww!' osztály Kutya ( Mutátor ): """ Kutya """ def create_legs ( self ): self . állat . lábak = 4 def create_tail ( self ): self . állat . farok = Igaz def create_roar ( self ): self . állat . ordít = 'woffff!' class AnimalOwner : "" " Állattulajdonos """ __mutator = '' def set_animal ( self , mutator ): self . __mutátor = mutátor def create_an_animal_for_me ( self ): self . __mutátor . mutál () én . __mutátor . create_legs () self . __mutátor . create_tail () self . __mutátor . Create_roar () def get_animal ( self ): return self . __mutátor . állat c = Macska () d = Kutya () ao = Állattulajdonos () ao . set_animal ( c ) stb . create_an_animal_for_me () animal = ao . get_animal () print animal . ordít #meowww !

PHP5

PHP forráskód <?php /** * Mintaépítő, ismert "építési receptekkel" működik */ /** * Pizza - Alapépület objektum */ class Pizza { private $_pastry = "" ; private $_sauce = "" ; private $_garniture = "" ; public function setPastry ( $tészta ) { $this -> _pastry = $tészta ; } public function setSauce ( $szósz ) { $this -> _sauce = $szósz ; } public function setGarniture ( $garniture ) { $this -> _garniture = $garniture ; } } /** * Builder – Abstract builder */ abstract class BuilderPizza { védett $_pizza ; public function getPizza () { return $this -> _pizza ; } public function createNewPizza () { $this -> _pizza = new Pizza (); } absztrakt nyilvános függvény buildPastry (); absztrakt nyilvános funkció buildSauce (); absztrakt nyilvános funkció buildGarniture (); } /** * BuilderConcret - Concrete builder 1 */ class BuilderPizzaHawaii kiterjeszti BuilderPizza { public function buildPastry () { $this -> _pizza -> setPastry ( "normál" ); } public function buildSauce () { $this -> _pizza -> setSauce ( "soft" ); } public function buildGarniture () { $this -> _pizza -> setGarniture ( "jambon+ananas" ); } } /** * BuilderConcret - Concrete builder 2 */ class BuilderPizzaSpicy kiterjeszti BuilderPizza { public function buildPastry () { $this -> _pizza -> setPastry ( "puff" ); } public function buildSauce () { $this -> _pizza -> setSauce ( "forró" ); } public function buildGarniture () { $this -> _pizza -> setGarniture ( "pepperoni+szalámi" ); } } /** * Rendező - Vezérlő osztály, amely elindítja az építkezést * PizzaBuilder - A Builder minta megvalósítása, amely a pizzakészítési folyamat delegálását mutatja a constructPizza metódusra */ class PizzaBuilder { private $_builderPizza ; public function setBuilderPizza ( BuilderPizza $mp ) { $this -> _builderPizza = $mp ; } public function getPizza () { return $this -> _builderPizza -> getPizza (); } public function constructPizza () { $this -> _builderPizza -> createNewPizza (); $this -> _builderPizza -> buildPastry (); $this -> _builderPizza -> buildSauce (); $this -> _builderPizza -> buildGarniture (); } } // Pizza inicializálása $pizzaBuilder = new PizzaBuilder (); // Elérhető termékek inicializálása $builderPizzaHawaii = new BuilderPizzaHawaii (); $builderPizzaPicante = új BuilderPizzaSpicy (); // A termék előkészítése és beszerzése $pizzaBuilder -> setBuilderPizza ( $builderPizzaHawaii ); $pizzaBuilder -> constructPizza (); $pizza = $pizzaBuilder -> getPizza ();

Ruby

Ruby forráskód # # Alapépület objektum # osztály Pizza attr_accessor :tészta , :szósz , :garniture end # # Builder - osztályépítő # class BuilderPizza attr_reader :pizza def create_new_pizza @pizza = Pizza . új vég def get_pizza "Az Ön rendelése. péksütemény: #{ @pizza . péksütemény } , szósz: #{ @pizza . szósz } , körítés : #{ @pizza . garniture } " vége # # BuilderConcret - Concrete builder 1 # class BuilderPizzaHawaii < BuilderPizza def build_pastry @pizza . péksütemény = 'normál' vége def build_sauce @pizza . szósz = 'puha' vége def build_garniture @pizza . garniture = 'jambon+ananas' end end end # # BuilderConcret - Concrete builder 2 # class BuilderPizzaSpicy < BuilderPizza def build_pastry @pizza . péksütemény = 'felfújt' vége def build_sauce @pizza . szósz = 'forró' vége def build_garniture @pizza . garniture = 'papperoni+szalámi ' végvég # # Rendező – A felépítést elindító menedzser osztály # class Waiter def set_builder_pizza ( bp ) @builder_pizza = bp end def get_pizza @builder_pizza . get_pizza end def construct_pizza @builder_pizza . létrehozás_új_pizza @builder_pizza . build_pastry @builder_pizza . build_szósz @builder_pizza . build_garniture end end pincér = Pincér . új builder_pizza_hawaii = ÉpítőPizzaHawaii . new builder_pizza_spicy = BuilderPizzaSpicy . új pincér . set_builder_pizza ( builder_pizza_hawaii ) pincér . construct_pizza pincért tesz . get_pizza

Delphi

Forrásszöveg Delphiben program BuilderPatternExample ; {$APPTYPE CONSOLE} SysUtils-t használ ; típus // Termék TPizza = osztály ( TObject ) szigorú privát FDough , FSauce , FTopping : string ; köztulajdon Tészta : string write FDough ; _ property Sauce : string write FSauce ; property Topping : string írás FTopping ; eljárás Mutasd ; vége ; // Abstract Builder TPizzaBuilder = osztály ( TObject ) szigorúan védett FPizza : TPizza ; köztulajdon Pizza : TPizza olvas FPizza ; _ konstruktor Create ; destructor Elpusztítani ; felülbírálni ; eljárás CreateNewPizzaProduct ; eljárás FreePizzaProduct ; eljárás BuildDough ; virtuális ; absztrakt ; eljárás BuildSauce ; virtuális ; absztrakt ; eljárás BuildTopping ; virtuális ; absztrakt ; vége ; // Concrete Builder A THawaiianPizzaBuilder = osztály ( TPizzaBuilder ) nyilvános eljárás BuildDough ; felülbírálni ; eljárás BuildSauce ; felülbírálni ; eljárás BuildTopping ; felülbírálni ; vége ; // Concrete Builder B TSpicyPizzaBuilder = osztály ( TPizzaBuilder ) nyilvános eljárás BuildDough ; felülbírálni ; eljárás BuildSauce ; felülbírálni ; eljárás BuildTopping ; felülbírálni ; vége ; // Director TPincér = class ( TObject ) szigorú privát FPizzaBuilder : TPizzaBuilder ; köztulajdon PizzaBuilder : TPizzaBuilder írjon FPIzzaBuilder ; _ konstruktor Create ; destructor Elpusztítani ; felülbírálni ; eljárás ConstructPizza ; eljárás FreePizza ; funkció GetPizza : TPizza ; vége ; {TPizza} eljárás TPizza . show ; begin WriteLn ( 'Pizza tésztával mint ' + FDough + ', szósz mint ' + FSauce + ' és Feltöltés mint ' + FTopping + '!' ) ; vége ; {TPizzaBuilder} kivitelező TPizzaBuilder . létrehozni ; kezdeni FPizza := nulla ; vége ; destructor TPizzaBuilder . elpusztítani ; start FreePizzaProduct ; öröklött Pusztítás ; vége ; eljárás TPizzaBuilder . Ingyenes pizzatermék ; kezdődik if FPizza <> nil then FreeAndNil ( FPizza ) ; vége ; eljárás TPizzaBuilder . CreateNewPizzaProduct ; kezdődik ha FPizza <> nil then FPizza . Ingyenes ; FPizza := TPizza . létrehozni ; vége ; {THawaiianPizzaBuilder} eljárás THawaiianPizzaBuilder . BuildDough ; kezdődik ha FPizza <> nil then FPizza . Tészta := 'kereszt' ; vége ; eljárás THawaiianPizzaBuilder . BuildSauce ; kezdődik ha FPizza <> nil then FPizza . Szósz := 'enyhe' ; vége ; eljárás THawaiianPizzaBuilder . BuildTopping ; kezdődik ha FPizza <> nil then FPizza . Feltöltés := 'sonka és ananász' ; vége ; { TSpicyPizzaBuilder } eljárás TSpicyPizzaBuilder . BuildDough ; kezdődik ha FPizza <> nil then FPizza . Tészta := 'serpenyős' ; vége ; eljárás TSpicyPizzaBuilder . BuildSauce ; kezdődik ha FPizza <> nil then FPizza . Szósz := 'forró' ; vége ; eljárás TSpicyPizzaBuilder . BuildTopping ; kezdődik ha FPizza <> nil then FPizza . Feltöltés := 'pepperoni és szalámi' ; vége ; {Tpincér} konstruktor Tpincér . létrehozni ; kezdődjön az FPizzaBuilder := null ; vége ; destructor Tpincér . elpusztítani ; kezdődjön az FPizzaBuilder := null ; öröklött Pusztítás ; vége ; eljárás TPincér . FreePizza ; kezdődik , ha FPIzzaBuilder <> nil then FPizzaBuilder . Ingyenes pizzatermék ; vége ; eljárás TPincér . Construct Pizza ; Kezdje , ha FPIzzaBuilder <> nulla , majd kezdje el az FPizzaBuildert . CreateNewPizzaProduct ; FPizzaBuilder . BuildDough ; FPizzaBuilder . BuildSauce ; FPizzaBuilder . BuildTopping ; vége ; vége ; funkció Tpincér . GetPizza : TPizza ; kezdődik , ha FPIzzaBuilder <> nil then Eredmény := FPIzzaBuilder . Pizza más Eredmény := null ; vége ; eljárás ConstructAndShowPizza ( Pincér : TWaiter ; Építő : TPizzaBuilder ) ; var Pizza : TPizza ; kezdje Pincér . PizzaBuilder := Építő ; pincér . Construct Pizza ; Pizza := Pincér . GetPizza ; próbáld ki a Pizzát . show ; végre Pincér . FreePizza ; vége ; vége ; var Pincér : TPincér ; HawaiianPizzaBuilder : THawaiianPizzaBuilder ; SpicyPizzaBuilder : TSpicyPizzaBuilder ; kezdődik HawaiianPizzaBuilder := null ; SpicyPizzaBuilder := nulla ; Pincér := nulla ; próbáld ki a HawaiianPizzaBuilder := THawaiianPizzaBuilder alkalmazást . létrehozni ; SpicyPizzaBuilder := TSpicyPizzaBuilder . létrehozni ; Pincér := T Pincér . létrehozni ; // Az ügyfél két pizzát rendelt ConstructAndShowPizza ( Pincér , HawaiianPizzaBuilder ) ; ConstructAndShowPizza ( pincér , SpicyPizzaBuilder ) ; végre Pincér . Ingyenes ; HawaiianPizzaBuilder . Ingyenes ; SpicyPizzaBuilder . Ingyenes ; vége ; Readln ; vége .

VB.NET

Forrásszöveg VB.NET nyelven Importálás Rendszer.Gyűjtemények.Általános Névtér- építő Nyilvános osztály MainApp Nyilvános megosztott al - () ' Rendező és építők létrehozása Dim igazgató új igazgatóként () Dim b1 As Builder = Új ConcreteBuilder1 () Dim b2 As Builder = Új ConcreteBuilder2 () ' Construct két termék igazgatója . Konstrukció ( b1 ) Dim p1 As Product = b1 . GetResult () p1 . Mutasd () igazgató . Konstrukció ( b2 ) Dim p2 As Product = b2 . GetResult () p2 . Mutasd () Várja meg a felhasználói konzolt . Olvassa el () End Sub End Class "Director" Class Director ' Builder egy összetett lépéssorozatot használ Public Sub Construct ( ByVal builder as Builder ) builder . BuildPartA () builder . BuildPartB () End Sub End Class ' "Builder" Must Inherit Class Builder Public MustOverride Sub BuildPartA () Public MustOverride Sub BuildPartB () Public MustOverride Function GetResult ( ) A termék végosztályaként ' "ConcreteBuilder1" osztály ConcreteBuilder1 örökli a Builder privát , csak olvasható terméket új termékként ( ) Nyilvános felülbírálja Sub BuildPartA () termék . Add ( "A rész" ) End Sub Nyilvános felülbírálja Sub BuildPartB () termék . Add ( "PartB" ) End Sub Nyilvános felülbírálja a GetResult () függvényt , mint a termék visszaadását , a termék befejező funkcióját , az utolsó osztályt ' "ConcreteBuilder2" osztály A ConcreteBuilder2 megörökli a Builder privát , csak olvasható terméket új termékként () Nyilvános felülbírálja Sub BuildPartA () termék . Add ( "PartX" ) End Sub Nyilvános felülbírálja Sub BuildPartB () termék . Add ( "PartY" ) End Sub Nyilvános felülbírálja a GetResult () függvényt , mint a termék visszaadását , a termék befejező funkcióját , az utolsó osztályt "Termék" osztály Termék Privát Csak olvasható részek Új listaként ( karakterláncból ) ( ) Public Sub Add ( ByVal part As String ) részek . Add ( rész ) End Sub Nyilvános alműsor ( ) Konzol . WriteLine ( vbLf & " Termékrészek -------" ) Minden alkatrészhez String In Part konzolként . WriteLine ( rész ) Következő vége Alvége Osztályvég Névtér _ _

Jegyzetek

Linkek