G.L Avancés
Lundi 07 Décembre 2015
Anouar MABROUK
Imen BOUHDIDA
Réalisé par :
Vendredi 30 Janvier 2015
Description du problème
G.L Avancés
Lundi 07 Décembre 2015
Exemple :
Une classe qui implémenterait un pilote pour une imprimante. Instancier deux fois cette classe
Surcharge inutile du système + Comportements incohérents.
La solution ?
G.L Avancés
Lundi 07 Décembre 2015
SINGLETON
La classe elle-même est responsable de l'unicité de son instance.
instance
Client1
Client2
Client3
Singleton
Requêtes
Impact sur la conception
G.L Avancés
Lundi 07 Décembre 2015
Exemple
d'implémentation
en JAVA
G.L Avancés
Lundi 07 Décembre 2015
G.L Avancés
Lundi 07 Décembre 2015
// Classe basée sur le pattern Singleton qui permet la journalisation de l'application.
public class Journalisation
{
private static Journalisation uniqueInstance;// Stockage de l'unique instance de cette classe.
private String log;// Chaine de caractères représentant les messages de log.
// Constructeur en privé (donc inaccessible à l'extérieur de la classe).
private Journalisation()
{
log = new String();
}
// Méthode statique qui sert de pseudo-constructeur
public static synchronized Journalisation getInstance()
{
if(uniqueInstance==null)
{
uniqueInstance = new Journalisation();
}
return uniqueInstance;
}
// Méthode qui permet d'ajouter un message de log.
public void ajouterLog(String log)
{
// On ajoute également la date du message.
Date d = new Date();
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy HH'h'mm");
this.log+="["+dateFormat.format(d)+"] "+log+"\n";
}
// Méthode qui retourne tous les messages de log.
public String afficherLog()
{
return log;
}
}// Classe représentant un compte bancaire simpliste.
public class CompteBancaire
{
private int numero;// Numéro du compte.
private double solde;// Argent disponible sur le compte.
// Constructeur d'un CompteBancaire à partir de son numéro.
public CompteBancaire(int numero)
{
this.numero=numero;
this.solde=0.0;
}
// Méthode qui permet de déposer de l'argent sur le compte.
public void deposerArgent(double depot)
{
if(depot>0.0)
{
solde+=depot;// On ajoute la somme déposée au solde.
Journalisation.getInstance().ajouterLog("Dépôt de "+depot+"Dt sur le compte "+numero+".");
}
else
{
Journalisation.getInstance().ajouterLog("/!\\ Dépôt d'une valeur négative impossible ("+numero+").");
}
}
// Méthode qui permet de retirer de l'argent sur le compte.
public void retirerArgent(double retrait)
{
if(retrait>0.0)
{
if(solde>=retrait)
{
solde-=retrait;// On retranche la somme retirée au solde.
Journalisation.getInstance().ajouterLog("Retrait de "+retrait+"Dt sur le compte "+numero+".");
}
else
{
Journalisation.getInstance().ajouterLog("/!\\ La banque n'autorise pas de découvert ("+numero+").");
}
}
else
{
Journalisation.getInstance().ajouterLog("/!\\ Rerait d'une valeur négative impossible ("+numero+").");
}
}
}// Classe principale de l'application.
public class Main
{
// Méthode principale.
public static void main(String[] args)
{
// Création et utilisation du CompteBancaire cb1.
CompteBancaire cb1 = new CompteBancaire(1);
cb1.deposerArgent(100);
cb1.retirerArgent(80);
// Création et utilisation du CompteBancaire cb2.
CompteBancaire cb2 = new CompteBancaire(2);
cb2.retirerArgent(10);
// Affichage des logs en console.
String s = Journalisation.getInstance().afficherLog();
System.out.println(s);
}
}[30/04/07 13h46] Dépôt de 100.0 Dt sur le compte 1.
[30/04/07 13h46] Retrait de 80.0 Dt sur le compte 1.
[30/04/07 13h46] /!\ La banque n'autorise pas de découvert (2).Conclusion
G.L Avancés
Lundi 07 Décembre 2015