1 / 15

Builder (design pattern)

Builder (design pattern). Bc. Martin Petru ňa 2.10.2012 SAI. Zaradenie. Builder patrí medzi vytváracie návrhové vzory Schéma:. Účastníci. Builder – definuje rozhranie pre konštrukciu častí vytváraného objektu

Download Presentation

Builder (design pattern)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Builder (design pattern) Bc. Martin Petruňa 2.10.2012 SAI

  2. Zaradenie • Builder patrí medzi vytváracie návrhové vzory • Schéma:

  3. Účastníci • Builder– definuje rozhranie pre konštrukciu častí vytváraného objektu • ConcreteBuilder– napĺňa kontrakt Builderaa zároveň zapúzdruje internú reprezentáciu stavaného objektu • Director– postupne pomocou Buildera stavia objekt Product • Product – definuje rozhranie budovaného objektu • ConcreteProduct– reprezentuje budovaný objekt spĺňajúci kontrakt Product

  4. Príklad

  5. Príklad Vytvárajúci kód je oddelený od reprezentácie vytváraného objektu, ktorý je vytváraný pomocou jednotného rozhrania.

  6. Implementačné detaily • Abstraktná trieda Builder definuje prázdne metódy, ConcreteBuilder implementuje tie, ktoré podporuje. • Novo pridané časti obyčajne stačí „pripojiť“ do internej štruktúry, inokedy ale potrebujeDirectorIdentifikovaťpredchádzajúce časti. • Niekedy sa nedefinuje abstraktná trieda pre Produkt (ten kto vyberá ConcreteBuilder vie aký ConcreteProductdostane). • Použitie tzv. Fluentinterface.

  7. Vzťah k iným návrhovým vzorom • Factory metóda nám umožní vytvoriť objekt v jedným volaním, AbstractFactorynám umožní vytvárať konzistentné sady objektov, Buildernaopak umožňuje postupné vytváranie a skladanie objektu • Jeho produktom je často Composite

  8. Builder a doporučené postupy OOP • Zapúzdrenie – žiadne zbytočné setre • Platný stav objektu – je možné interne kontrolovať stav budovaného objektu a odhaliť prípadné nezrovnalosti • Absencia úzkych väzieb – v tomto prípade oddelenie konštrukcie (príp. validácie) od reprezentácie • Čitateľnejší a prehľadnejší kód • Lepšia testovateľnosť kódu

  9. Builder ktorý používam ja • packageupjs.petruna.sai.builder; • publicclassFTPRequest { • privateintport; • privateStringhost; • privatebyte[] payload; • privateTimestamptimestamp; • privateFTPRequest(Builderbuilder) { • this.port = builder.port; • this.host = builder.host; • this.payload = builder.payload; • this.timestamp = builder.timestamp; • } • @Override • publicStringtoString() { • return"FTPRequest [port=" + port + ", host=" + host + ", payload=" • + Arrays.toString(payload) + ", timestamp=" + timestamp + "]"; • } • publicstaticclassBuilder{…} • }

  10. Builder ktorý používam ja • publicstaticclassBuilder { • privateintport; • privateStringhost; • privatebyte[] payload; • privateTimestamptimestamp; • publicBuilder port(int port){ this.port=port; returnthis; } • publicBuilder host(String host){ this.host=host; returnthis; } • publicBuilderpayload(byte[] payload){ this.payload=payload; returnthis; } • publicBuildertimestamp(Timestamptimestamp){ this.timestamp=timestamp; returnthis; } • publicFTPRequestbuild(){ • returnnewFTPRequest(this); • } • }

  11. Builder ktorý používam ja • packageupjs.petruna.sai.builder; • importjava.sql.Timestamp; • publicclassDirector { • publicstaticvoid main(String[] args) { • FTPRequestrequest = newFTPRequest.Builder().port(200) • .payload("payload".getBytes()).host("localhost") • .timestamp(newTimestamp(System.currentTimeMillis())).build(); • System.out.println(request); • } • } FTPRequest [port=200, host=localhost, payload=[112, 97, 121, 108, 111, 97, 100], timestamp=2012-10-01 22:05:36.671]

  12. Príklady z Javy (1) • StringBuilder

  13. Príklady z Javy (2) • SaxParser

  14. Príklady z Javy (3) • MapMaker (Guava)

  15. Ďakujem za pozornosť!

More Related