Builder, precum Singleton, este un design pattern creational. Practic este o forma de a crea obiecte mai simplu
Builder il folosim cand avem obiecte complexe si vrem un mod secvential de a le crea. Sa luam un exemplu simplu provenit chiar din framework-ul cu care este construit acest blog: OrchardCore CMS. Sa presupunem ca avem clasa BlogPost care contine lista de field-uri. Un blogpost poate sa aiba titlu, sub-titlu sau body, dar niciun field nu este obligatoriu. De asemenea, putem sa adaugam mai multe field-uri de acelasi timp. In cazul de fata nu prea are sens sa pui doua titluri pentru un blogpost, dar sa presupunem ca aveam un field de tip imagine, un blogpost poate sa contina una sau mai multe imagini sau poata sa nu foloseasaca nicio imagine. La sfarsit dupa ce ai toate proprietatile setate poti sa iei instanta creata.
Cu builder putem crea secvential obiectul, la sfarsit putand sa-l preluam. Pentru acest lucru avem nevoie de o clasa Builder ce va implementa interfata IBuilder. Aceasta interfata va contine semnaturile metodelor ce vor crea partile de blogpost, plus inca doua metode: una ce va returna blogpost-ul creat la sfarsit si una in caz ca se doreste resetarea blogpostului curent ce este creat.
Pentru crearea obiectele vom intializa builder-ul si vom apela metodele pentru campurile pe care le vrem, la sfarsit vom apela metoda de returnare a post-ului creat. Exista numeroase alternative de builder. Tin minte ca in facultate am facut cel putin 3 versiuni de Builder. Deci exista numeroasa variatiuni.