Sunteți pe pagina 1din 10

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.1
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 Singleton,care va gestiona necesitățile săli de sport.

Etapele de lucru

În practica studierii proprietăţilor șabloanelor de proiectare este răspândită metoda Singleton . Este
un model de proiectare pentru construcția obiectelor. Se încadrează în categoria modelelor de design
„creaționale”. După cum sugerează și numele, ne permite să avem o singură instanță dintr-o clasă. Această
clasă va fi o clasă single.

În majoritatea cazurilor, obiectele singleton sunt utilizate pentru a furniza setări de configurare sau
mediu global aplicației dvs.

Problema identificata

În cadrul analizei domeniului de implementare,a fost identificată problema lipsirii informației privind
obiectele existente în cadrul companei.Pentru a duce evidența obiectelor unice a fost utilizat șablonul
Singleton,care encapsulează logica pentru crearea obiectelor și permite accesul la informația dorită.Astfel
pentru rezolvarea acestei probleme a fost implementat o bază de date

Șablonul Singleton are urmatoarele avantaje:

1. Controleaza accesul la instanta unica, deoarece clasa Singleton incapsuleaza propria


instanta;
2. Conduce la reducerea spatiului de nume, deoarece nu implica folosirea variabilelor
globale;
3. Permite detalierea operatiilor si a reprezentarilor. Clasa Singleton poate fi derivata
si este usor sa se configureze o aplicatie cu o instanta a clasei derivate;
4. Poate fi adaptat pentru a se crea nu doar o singura instanta, ci un numar oarecare
fixat, pastrandu-se mereu controlul asupra acestui numar. Pentru aceasta este necesar sa
se modifice doar operatia Instance;
5. Asigura o flexibilitate mai mare decat daca s-ar utiliza metode statice. O alternativa
la sablonul Singleton ar fi fost ca toate functiunile clasei Singleton sa fie realizate cu
ajutorul unor metode statice (practic in acest caz am fi avut de a face cu 0 instante, nu
cu una).
Dezavantajele ar fi ca:

 Solutia nu poate fi adaptata pentru situatia in care dorim 'n' instante in loc de 1;
 Metodele statice nu pot fi virtuale, deci nu pot fi redefinite in subclase pentru a
putea beneficia de polimorfism.
Asigurarea unicitatii instantei. O posibilitate in acest sens este de a ascunde operatia care
creaza instante (constructorii) in spatele unei metode statice care poate garanta numarul de
instante create. Aceasta metoda are acces la o variabila care contine sau care refera instanta si
are grija sa initializeze variabila respectiva inainte de a o returna clientilor.

Diagrama UML:

Codul:

JDBCSingleton.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

class JDBCSingleton {
    
 //Pasul 1  
      // creați o clasă JDBCSingleton.  
     // membru static deține o singură instanță din clasa JDBCSingleton.  
           
         private static JDBCSingleton jdbc;
         
      // JDBCSingleton împiedică instanțierea de la orice altă clasă.  
         private JDBCSingleton() {  }
      
    // Acum oferim punctul de acces gloabal.  
          
         public static JDBCSingleton getInstance() {  
                                     if (jdbc==null)
                                   {
                                            jdbc=new   
                                      JDBCSingleton();
                                   }
                         return jdbc;
             }
          
   // pentru a obține conexiunea din metode precum inserare, vizualizare etc.   
          private static Connection getConnection()throws ClassNotFoundException, SQLException
          {
              
              Connection con=null;
              Class.forName("com.mysql.jdbc.Driver");
              con= DriverManager.getConnection("jdbc:mysql://localhost:3306/ashwanirajput", "root", "ashwani"
);
              return con;
              
          }
          
  // pentru a insera înregistrarea în baza de date  
          public int insert(String name, String pass) throws SQLException
          {
              Connection c=null;
              
              PreparedStatement ps=null;
              
              int recordCounter=0;
              
              try {
                  
                      c=this.getConnection();
                      ps=c.prepareStatement("insert into userdata(uname,upassword)values(?,?)");
                      ps.setString(1, name);
                      ps.setString(2, pass);
                      recordCounter=ps.executeUpdate();
                      
                      
              } catch (Exception e) {
                  
                  e.printStackTrace();
                  
              } finally{
                    
                  if (ps!=null){
                      ps.close();
                  }if(c!=null){
                      c.close();
                  } 
                  
              }
              
             return recordCounter;
          }

//pentru a vedea datele din baza      
      public  void view(String name) throws SQLException
      {
                Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
                
                try {
                    
                        con=this.getConnection();
                        ps=con.prepareStatement("select * from userdata where uname=?");
                        ps.setString(1, name);
                        rs=ps.executeQuery();
                        while (rs.next()) {
                                  System.out.println("Name= "+rs.getString(2)+"\t"+"Paasword= "+rs.getString(3));    
                       
                        }
                    
              
          } catch (Exception e) {
                    System.out.println(e);
              
          }finally{
                    if(rs!=null){
                        rs.close();
                    }if (ps!=null){
                      ps.close();
                  }if(con!=null){
                      con.close();
                  } 
                    
                }
      }
      
     // pentru a actualiza parola pentru numele de utilizator dat  

      public int update(String name, String password) throws SQLException
      {
              Connection c=null;
              
              PreparedStatement ps=null;
              
              int recordCounter=0;
              
              try {
                  
                      c=this.getConnection();
                      ps=c.prepareStatement(" update userdata set upassword=? where uname='"+name+"' ");
                      ps.setString(1, password);
                      recordCounter=ps.executeUpdate();
                      
                      
              } catch (Exception e) {
                  
                  e.printStackTrace();
                  
              } finally{
                    
                  if (ps!=null){
                      ps.close();
                  }if(c!=null){
                      c.close();
                  } 
                  
              }
              
             return recordCounter;
          }
          
// pentru a șterge datele din bază
         public int delete(int userid) throws SQLException
      {
              Connection c=null;
              
              PreparedStatement ps=null;
              
              int recordCounter=0;
              
              try {
                  
                      c=this.getConnection();
                      ps=c.prepareStatement(" delete from userdata where uid='"+userid+"' ");
   
                      recordCounter=ps.executeUpdate();
                      
                      
              } catch (Exception e) {
                  
                  e.printStackTrace();
                  
              } finally{
                    
                  if (ps!=null){
                      ps.close();
                  }if(c!=null){
                      c.close();
                  } 
                  
              }
              
             return recordCounter;
          }
            
          
     
    
 }// Sfârșitul clasei JDBCSingleton  

JDBCSingletonDemo.java
class JDBCSingletonDemo{
    static int count=1;
    static int  choice;
    public static void main(String[] args) throws IOException {
        
        JDBCSingleton jdbc= JDBCSingleton.getInstance();
        
        
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
   do{ 
        System.out.println("DATABASE OPERATIONS");
        System.out.println(" --------------------- ");
        System.out.println(" 1. Insertion ");
        System.out.println(" 2. View      ");
        System.out.println(" 3. Delete    ");
        System.out.println(" 4. Update    ");
        System.out.println(" 5. Exit      ");
        
        System.out.print("\n");
       
        
        System.out.print("Please enter the choice what you want to perform in the database: ");
        
        choice=Integer.parseInt(br.readLine());
        
        switch(choice)
       {
            
           case 1:{
                    System.out.print("Enter the username you want to insert data into the database: ");
                    String username=br.readLine();
                    System.out.print("Enter the password you want to insert data into the database: ");
                    String password=br.readLine();
                    
                    try {
                            int i= jdbc.insert(username, password);
                            if (i>0) {
                            System.out.println((count++) + " Data has been inserted successfully");
                            }else{
                                System.out.println("Data has not been inserted ");    
                            }
                        
                        } catch (Exception e) {
                          System.out.println(e);
                        }
                    
                     System.out.println("Press Enter key to continue...");
                     System.in.read();
                     
                   }                   } // Sfârșitul cazului 1  

                   break;
            case 2:{
                    System.out.print("Enter the username you want to view the entire data from the database: ");
                    String username=br.readLine();
             
                    try  {
                            jdbc.view(username);
                         } catch (Exception e) {
                          System.out.println(e);
                        }
                     System.out.println("Press Enter key to continue...");
                     System.in.read();
                     
                   }// Sfârșitul cazului 2
                  break;
             case 3:{
                     System.out.print("Enter the userid for which you want to delete the entire data from the databas
e: ");
                     int userid=Integer.parseInt(br.readLine());
           
                     try {
                            int i= jdbc.delete(userid);
                            if (i>0) {
                            System.out.println((count++) + " Data has been deleted successfully");
                            }else{
                                System.out.println("Data has not been deleted");    
                            }
                        
                         } catch (Exception e) {
                          System.out.println(e);
                         }
                     System.out.println("Press Enter key to continue...");
                     System.in.read();
                     
                    }// Sfârșitul cazului  3
                   break;
             case 4:{
                    System.out.print("Enter the username for which  you want to update the data into the database: "
);
                    String username=br.readLine();
                    System.out.print("Enter the new password ");
                    String password=br.readLine();
                    
                    try {
                            int i= jdbc.update(username, password);
                            if (i>0) {
                            System.out.println((count++) + " Data has been updated successfully");
                            }
                        
                        } catch (Exception e) {
                          System.out.println(e);
                        }
                     System.out.println("Press Enter key to continue...");
                     System.in.read();
                    
                   }// Sfârșitul cazului  4
                 break;
                 
             default:
                     return;
        }
        
       } while (choice!=4); 
       
    
  }
}
Aplicare

Utilizatorii aplicatiei doresc sa aiba posibilitatea sa verifice lista,graficul cind au fost înregistrați la sală .
Pentru a furniza aceasta functionalitate este nevoie de utilizarea bazei de date.Aceasta trebuie sa fie
accesibila de oriunde din si este nevoie de o singura instanta a sa.

Prin urmare,aceasta este un candidat perfect pentru sablonul Singleton.

CONCLUZIE

Pentru realizarea lucrării de laborator nr.1 s-a utilizat șablonul de proiectare Singleton ,care a fost
studiat în cadrul orelor de curs. Sa studiat mai detaliat proprietățile și metodele de implementare,de
asemenea ce probleme pot fi rezolvate cu ajutorul acestui șablon.

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