Sunteți pe pagina 1din 11

Ministerul Educației, Culturii și Cercetării

Universitatea Tehnică a Moldovei


Facultatea Calculatoare, Informatică şi Microelectronică
Departamentul Ingineria Software și Automatică

Șabloane de Proiectare
Lucrare de laborator nr.2
Disciplina:Tehnici și mecanisme de proiectare software

Studentul gr. TI-183: Borta Sergiu


Conducător: Scrob Sergiu

Chișinău 2021
Scopul lucrării
Crearea unui program utilizînd șablonul de proiectare Builder care va gestiona necesitățile săli de sport.

Indicații teoretice:

Sablonul Builder se aplica in situatiile in care:


 algoritmul de creare a unui obiect complex trebuie sa fie independent de partile ce compun
obiectul;
 procesul de construire trebuie sa permita reprezentari diverse pentru obiectul implicat.

Sablonul Builder:

 permite schimbarea reprezentarii interne pentru produs. Deoarece construirea produsului


se face via o interfata abstracta (Builder), daca se doreste la un moment dat sa se treaca la
o alta reprezentare interna, trebuie doar sa se asocieze Director-ul cu un alt obiect
ConcreteBuilder;
 izoleaza codul aferent construirii si reprezentarii. Aici este vorba de o aplicare a
principiului modularitatii, prin faptul ca se incapsuleaza (in obiectele ConcreteBuilder)
modul in care un obiect este construit si reprezentat. Clientii nu trebuie sa stie nimic
despre clasele care definesc structura interna a produsului. Aceste clase nu apar in interfata
Builder. Fiecare ConcreteBuilder contine intregul cod pentru a crea si asambla un anumit
produs particular. Mai multe obiecte Director diferite pot reutiliza codul respectiv pentru a
crea produse;
 permite un control mai adanc asupra procesului de construire. Spre deosebire de alte
sabloane creationale, care construiesc produsele "dintr-un foc", sablonul Builder
construieste produsul pas cu pas, sub controlul obiectului Director. Doar cand produsul
este gata, el poate fi obtinut de la constructor. Interfata Builder reflecta procesul de
constructie mai in detaliu decat celelalte sabloane creationale.

Problema identificata
În cadrul analizei domeniului de implementare,a fost identificată problema înregistrării pe site în
cadrul companiei.Pentru a crea obiecte complexe de tip user(fiecare se inregistrează la sală după
abonament) cît și pentru a efectua înregistrarea pas cu pas a fost utilizat șablonul Builder ,care
permite crearea obiectelor complexe independente de părțile componente.Astfel pentru rezolvarea
acestei probleme a fost necesar de indicat diferite obiecte.
problema înregistrării pe site în cadrul companiei.Astfel pentru a efectua înregistrarea pas cu pas a
fost utilizat șablonul Builder.
Diagrama UML:

In figura de mai jos este data structura de clase care constituie sablonul Builder:

FormBuilder este interfata pentru crearea partilor unui obiect (produsul).


Form este ConcreteBuilder:
 construieste si asambleaza partile unui produs, implementand interfata Builder;
 defineste si pastreaza un istoric al reprezentarilor pe care le creaza;
 ofera o interfata pentru obtinerea produsului finit.

Codul:
import java.util.Date;
 
public class Form {
     
    private String firstName;
    private String lastName;
    private String userName;
    private String password;
    private String address;
    private Date dob;
    private String email;
    private String backupEmail;
    private String spouseName;
    private String city;
    private String state;
    private String country;
    private String language;
    private String passwordHint;
    private String securityQuestion;
    private String securityAnswer;
     
    public static class FormBuilder {
     
        private String firstName;
        private String lastName;
        private String userName;
        private String password;
        private String address;
        private Date dob;
        private String email;
        private String backupEmail;
        private String spouseName;
        private String city;
        private String state;
        private String country;
        private String language;
        private String passwordHint;
        private String securityQuestion;
        private String securityAnswer;
         
        public FormBuilder(String firstName, String lastName, String userName, String password){
            this.firstName = firstName;
            this.lastName = lastName;
            this.userName = userName;
            this.password = password;
        }
         
        public FormBuilder address(String address){
            this.address = address;
            return this;
        }
         
        public FormBuilder dob(Date dob){
            this.dob = dob;
            return this;
        }
         
        public FormBuilder email(String email){
            this.email = email;
            return this;
        }
         
        public FormBuilder backupEmail(String backupEmail){
            this.backupEmail = backupEmail;
            return this;
        }
         
        public FormBuilder spouseName(String spouseName){
            this.spouseName = spouseName;
            return this;
        }
         
        public FormBuilder city(String city){
            this.city = city;
            return this;
        }
         
        public FormBuilder state(String state){
            this.state = state;
            return this;
        }
         
        public FormBuilder country(String country){
            this.country = country;
            return this;
        }
         
        public FormBuilder language(String language){
            this.language = language;
            return this;
        }
         
        public FormBuilder passwordHint(String passwordHint){
            this.passwordHint = passwordHint;
            return this;
        }
         
        public FormBuilder securityQuestion(String securityQuestion){
            this.securityQuestion = securityQuestion;
            return this;
        }
         
        public FormBuilder securityAnswer(String securityAnswer){
            this.securityAnswer = securityAnswer;
            return this;
        }
         
        public Form build(){
            return new Form(this);
        }
    }
     
    private Form(FormBuilder formBuilder){
         
        this.firstName = formBuilder.firstName;
        this.lastName = formBuilder.lastName;
        this.userName = formBuilder.userName;
        this.password = formBuilder.password;
        this.address = formBuilder.address;
        this.dob = formBuilder.dob;
        this.email = formBuilder.email;
        this.backupEmail = formBuilder.backupEmail;
        this.spouseName = formBuilder.spouseName;
        this.city = formBuilder.city;
        this.state = formBuilder.state;
        this.country =  formBuilder.country;
        this.language = formBuilder.language;
        this.passwordHint = formBuilder.passwordHint;
        this.securityQuestion = formBuilder.securityQuestion;
        this.securityAnswer = formBuilder.securityAnswer;
    }
     
    @Override
    public String toString(){
        StringBuilder sb = new StringBuilder();
        sb.append(" First Name: ");
        sb.append(firstName);
        sb.append("\\n Last Name: ");
        sb.append(lastName);
        sb.append("\\n User Name: ");
        sb.append(userName);
        sb.append("\\n Password: ");
        sb.append(password);
         
        if(this.address!=null){
            sb.append("\\n Address: ");
            sb.append(address);
        }
        if(this.dob!=null){
            sb.append("\\n DOB: ");
            sb.append(dob);
        }
        if(this.email!=null){
            sb.append("\\n Email: ");
            sb.append(email);
        }
        if(this.backupEmail!=null){
            sb.append("\\n Backup Email: ");
            sb.append(backupEmail);
        }
        if(this.spouseName!=null){
            sb.append("\\n Spouse Name: ");
            sb.append(spouseName);
        }
        if(this.city!=null){
            sb.append("\\n City: ");
            sb.append(city);
        }
        if(this.state!=null){
            sb.append("\\n State: ");
            sb.append(state);
        }
        if(this.country!=null){
            sb.append("\\n Country: ");
            sb.append(country);
        }
        if(this.language!=null){
            sb.append("\\n Language: ");
            sb.append(language);
        }
        if(this.passwordHint!=null){
            sb.append("\\n Password Hint: ");
            sb.append(passwordHint);
        }
        if(this.securityQuestion!=null){
            sb.append("\\n Security Question: ");
            sb.append(securityQuestion);
        }
        if(this.securityAnswer!=null){
            sb.append("\\n Security Answer: ");
            sb.append(securityAnswer);
        }
         
        return sb.toString();
    }
     
    public static void main(String[] args) {
        Form form = new Form.FormBuilder("Sergiu", "Borta", "BortaSergiu", "SeRgiU228").passwordHint("L
iberty11").city("Chisinau").language("English").build();
        System.out.println(form);
    }
 
}

Aplicare
CONCLUZIE

Pentru realizarea lucrării de laborator nr.2 s-a utilizat șablonul de proiectare


Builder(Constructor),care a fost studiat în cadrul orelor de curs. Sa studiat mai detaliat proprietățile și
metodele de implementare,de asemenea a fost rezolvată problema pentru companie cu ajutorul acestui
șablon.

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