Градитељ (енгл. -{Builder}-) је објектно-оријентисани пројектни узорак. Припада категорији објектних узорака креирања. Користи се зарад раздвајања прављења сложеног објекта од његове репрезентације, односно корак-по-корак прављења сложеног објекта од једноставнијих.
Честе употребе Градитељ је доста користан када је потребно да изградња сложеног објекта буде независна од његових делова. Тиме се постиже да се произведу различите репрезентације сложеног објекта који се изграђује. Због тога је овај пројектни узорак један од најбољих начина за изградњу сложенијих објеката. Градитељ се често користи и за изградњу састава.
Учесници Градитељ има четири учесника.
Производ Представља сложени објекат који треба да се изгради. Укључује све класе или интерфејсе који су потребни да опишу делове који ће се користити за изградњу сложеног објекта.
Градитељ Одређује интерфејс за изградњу производа који је потребно имплементирати.
Конкретан градитељ Имплементира интерфејс градитеља за изградњу конкретног производа који се чува и који се по потреби може дохватити.
Управљач Он заправо изграђује сложени објекат, преко конкретног градитеља.
Дијаграм класа 500px|мини|Дијаграм класа пројектног узорка Градитељ Дијаграм класа за пројектни узорак градитељ се налази на слици десно. Приказан је преко Обједињеног језика за моделирање.
Предности и мане Градитељ омогућава изолацију производа од клијената, јер клијенти ништа не треба да знају о класама које дефинишу унутрашњу структуру производа. Такође, преко управљача се омогућује изградња сложеног објекта у корацима. Због апстрактности интерфејса градитеља управљачу, све што је потребно за измену унутрашње репрезентације производа јесте замена или дефиниција новог конкретног градитеља. Ипак, ово може некад бити и мана, јер је потребан различит конкретан градитељ за различите типове производа. Осим тога, мана може бити и то што се овим узорком уводи додатна индирекција преко конкретног градитеља, чиме корисници сада постају зависни од њега приликом изградње жељених објеката.
Имплементација Приликом имплементације овог пројектног узорка, треба водити рачуна да интерфејс за градитеља буде што општији, колико је год то могуће, да би се омогућили разни конкретни градитељи. Некада то значи декларисање што више операција од којих би свака подржала прављење једног дела. У вези са тиме, некада треба водити рачуна да се за прављење делова могу користити већ готови други делови. Такође, како су за различите случајеве производи веома различити и са другачијим интерфејсима, нема потребе за апстрактном класом за производ више у хијерархији. Када се ради са језиком C++, корисно је методе поставити као празне, а не као чисте виртуелне, јер се омогућује тада корисницима да "прегазе" (override) оне операције које желе. Тиме им се олакшава израда сопствених конкретних градитеља, јер не морају да воде рачуна о свим методама.
Испод је дат пример имплементације градитеља на програмском језику Јава, преузет са сајта који се може наћи на спољашњим линковима. Ради се о једноставном примеру изградње аутомобила користећи градитеља. Класе су, наравно, посебни фајлови и потребно је укључити одговарајуће пакете, али су овде приказани на једном месту.
Јава //Klasa Car predstavlja Proizvod class Car { private String color;
public Car() {}
@Override public String toString() { return "Car [color=" + color + "]";
public String getColor() { return color;
public void setColor(String color) { this.color = color;
//Interfejs CarBuilder je zapravo apstraktni Graditelj kojeg ce implementirati Konkretni graditelji interface CarBuilder { void setColor(String color); Car getResult(); }
//Klasa CarBuilderImpl je primer Konkretnog graditelja class CarBuilderImpl implements CarBuilder { private Car car;
public CarBuilderImpl() { car = new Car();
@Override public void setColor(String color) { car.setColor(color);
@Override public Car getResult() { return car;
//CarBuildDirector je zapravo Upravljac public class CarBuildDirector { private CarBuilder builder;
public CarBuildDirector(CarBuilder builder) { this.builder = builder;
public Car construct() { builder.setColor("Red"); return builder.getResult();
public static void main(String[] args) { CarBuilder builder = new CarBuilderImpl(); CarBuildDirector carBuildDirector = new CarBuildDirector(builder); System.out.println(carBuildDirector.construct());
Литература
Референце
Спољашње везе The Builder design pattern Problem, Solution, and Applicability Design pattern: singleton, prototype and builder Builder Design Pattern THE BUILDER PATTERN proft.me - линк сајта са примером имплементације градитеља у Јави
Категорија:Пројектни узорци