Sunteți pe pagina 1din 7

MINISTERUL EDUCAŢIEI, CULTURII și CERCETĂRII al REPUBLICII MOLDOVA

UNIVERSITATEA TEHNICĂ a MOLDOVEI


FACULTATEA CALCULATOARE, INFORMATICĂ și MICROELECTRONICĂ
DEPARTAMENTUL INGINERIA SOFTWARE și AUTOMATICĂ

RAPORT la lucrarea de laborator Nr. 2


Disciplina: Tehnici si Mecanisme de Proiectare Software
TEMA: Sablonul de proiectare BUILDER

Elaborat: st. gr. TI-181 Peretean Ilie


Verficat: conf. univ. Scrob Sergiu

Chișinău – 2021
Sarcina
Crearea unui program folosind sablonul de proiectare builder, care va gestiona necesitatile companii de
asigurari auto

Definitie

Pattern-ul Builder dorește separarea construcției de obiecte complexe de reprezentarea


lor astfel încât același proces să poată crea diferite reprezentări.

Structura

Clasele și obiectele care participă la acest model sunt:

Constructor (VehicleBuilder)
specifică o interfață abstractă pentru crearea părților unui obiect Produs
ConcreteBuilder (MotorCycleBuilder, CarBuilder, ScooterBuilder)
construiește și asamblează părți ale produsului prin implementarea interfeței Builder
definește și ține evidența reprezentării pe care o creează oferă o interfață pentru
preluarea produsului
Director (magazin)
construiește un obiect folosind interfața Builder Produs (vehicul) reprezintă obiectul
complex în construcție. ConcreteBuilder construiește reprezentarea internă a
produsului și definește procesul prin care este asamblat include clase care definesc
părțile componente, inclusiv interfețe pentru asamblarea pieselor în rezultatul final.

Implementare
Sa ne imaginam ca avem nevoie de a crea o clasa cu o multime de parametri – de
exemplu , clasa Participant cu urmatoarele campuri :

public class Participant {

private String coachId;


private String coachName;
private String firma;
private String participantCountry;
private String participant_id;
private String participantID;
private String participantName;
private String masina;
private String age;
private String weight;
private String anul;
private String photo;
private String issue;
private String coachCountry;
private String firstName;
private String lastName;
private String countryId;
private String categoryName;
private String participantCountryFull;
private String participantFirstName;
private String participantLastName;
}

Iar acum sa ne imaginam, ca vrem pentru aceasta clasa sa stabilim toate


constructoarele posibile de care avem nevoie. De ce ? Pentru a utiliza diferiti
constructori in diferite parti ale codului si pentru a crea instante ale clasei Participant
cu un numar diferit de campuri completate (de exemplu, avem 6 campuri in clasa. Si
vrem sa completam doar 3 campuri).
Exemplu ar arata asftel:

public class Participant {


private String coachId;
private String coachName;
private String masina;
private String participantCountry;
private String participant_id;
private String participantID;
private String participantName;
private String anul;
private String age;
private String weight;
private String anul autovehicolului;
private String photo;
private String issue;
private String coachCountry;
private String firstName;
private String lastName;
private String countryId;
private String categoryName;
private String participantCountryFull;
private String participantFirstName;
private String participantLastName;

Participant(String coachId, String coachName, String club, String participantCountry,


String participant_id) {
this.coachId = coachId;
this.coachName = coachName;
this.masina = club;
this.participantCountry = participantCountry;
this.participant_id = participant_id;
}

public Participant(String participantName, String sex, String age, String weight,


String birthday, String photo) {
this.participantName = participantName;
this.marca = marca;
this.anul = anul;
this.weight = weight;
this.anul autovehicolului anul autovehicolului;
this.photo = photo;
}
//……….

Dupa cum se vede , avem 2 constructoare dar se poate intampla de a fi mai multe.

Problema

Problema consta in faptul ca noi vom trebui sa scrim diferite combinatii de parametri.
Mai mult de atat, va fi foarte usor sa facem accidental greseli in scrierea parametrilor
la locul lor. De exemplu putem scrie (“ Peretean “, “ Ilie”) in loc de Participant
(“Peretean”, “Ilie”), sau de exemplu putem incurca locul varstei cu inaltimea sau
gretatea deoarece ambii parametri sunt de acelasi tip si este posibil sa nu observam
eroarea pentru o lunga perioada de timp.

Sablonul de proiectare Builder ne ajuta sa rezolvam toate aceste probleme.

Pentru aceasta cream in clasa noastra inca o clasa si o numim Builder:

public static class Builder {


private String participantName;
private String coachName;
private String firma;
private String participantCountry;
private String marca;
private String anul;
private String weight;
private String anul auto vehicolului;

public Builder setParticipantName(final String participantName) {


this.participantName = participantName;
return this;
}

public Builder setCoachName(final String coachName) {


this.coachName = coachName;
return this;
}
public Builder setMarca(final String marca {
this.firma = firma;
return this;
}
public Builder setParticipantCountry(final String participantCountry) {
this.participantCountry = participantCountry;
return this;
}
public Builder setmarca(final String marca) {
this.marca = marca;
return this;
}
public Builder setAge(final String age) {
this.anul = anul;
return this;
}
public Builder setWeight(final String weight) {
this.weight = weight;
return this;
}
public Builder setAnulAutovehicolului(final String Anul Autovehicolului) {
this.Anul autovehicolului = Anul auto vehicolului;
return this;
}
public Participant create() {
return new Participant(this);
}
}

Ca sa fie mai usor , sa ne imaginam ca avem acest Builder doar pentru un parametru ,
de exemplu Name si sa o impartim in 3 parti:

Consturctor

Parametrul

Metoda care returneaza


obiectul creat.

apelam Builder-ul pentru creara unui participant pentru participarea ulterioara la


campionat:

Participant participant = new Participant.Builder()


.setParticipantName(etParticipantFirstName.getText().toString() + " " +
etParticipantLastName.getText().toString().trim())
.setParticipantCountry(etParticipantCountry.getText().toString().trim())
.setClub(etParticipantfirma.getText().toString().trim())
.setBirthday(etParticipantAnul autovehicolului.getText().toString().trim())
.setCoachName(etParticipantCoachName.getText().toString().trim())
.setAge(etParticipantanul.getText().toString().trim().trim())
.setWeight(etParticipantWeight.getText().toString().trim())
.setSex(etGender.getText().toString().trim())
.create();
participantPresenter.addParticipant(participant);

Concluzie:

In concluzie pot sa spun ca sablonul de proiecate Builder are multe avantaje foarte
placute pentru orice dezvoltator. Unul foarte important este ca codul pare mult mai
usor de citit cu ajutorul acestu model de proiectare deoarece tot ce are legatura cu
crearea unui obiect este preluat intr-o clasa separate - Builder, de asemenea la
completarea campurilor obiectului , parametrii sunt mai greu de amestecat ceea ce ne
ajuta la evitarea erorilor.

S-ar putea să vă placă și