Classe Pizza :
package fr.mer.gestion.semaine3.factory; public abstract class Pizza { protected String nom; protected double prix; public Pizza(String nom, double prix) { this.nom = nom; this.prix = prix; } /** * Méthode abstraite à écrire dans les sous-classes. */ public abstract void afficher(); }
Classe PizzaFromages :
package fr.mer.gestion.semaine3.factory; public class PizzaFromages extends Pizza { public PizzaFromages() { super("4 Fromages", 11.99); } @Override public void afficher() { System.out.println(nom + " - Prix : " + prix + "€ (Mozzarella, Gorgonzola, Parmesan, Chèvre)"); } }
Classe PizzaMargherita :
package fr.mer.gestion.semaine3.factory; public class PizzaMargherita extends Pizza { public PizzaMargherita() { super("Margherita", 8.99); } @Override public void afficher() { System.out.println(nom + " - Prix : " + prix + "€ (Tomate, Mozzarella, Basilic)"); } }
Classe PizzaReine :
package fr.mer.gestion.semaine3.factory; public class PizzaReine extends Pizza { public PizzaReine() { super("Reine", 10.99); } @Override public void afficher() { System.out.println(nom + " - Prix : " + prix + "€ (Tomate, Mozzarella, Jambon, Champignons)"); } }
Classe PizzaFactory :
package fr.mer.gestion.semaine3.factory; class PizzaFactory { /** * Méthode de la Factory pour créer des Pizzas * @param type * @return Pizza * @throws ExceptionPizzaIntrouvable */ public static Pizza creerPizza(String type) throws ExceptionPizzaIntrouvable { var typePizza = type.toUpperCase(); if ("MARGHERITA".equals(typePizza)) { return new PizzaMargherita(); } else if ("REINE".equals(typePizza)) { return new PizzaReine(); } else if ("4_FROMAGES".equals(typePizza)) { return new PizzaFromages(); } else { throw new ExceptionPizzaIntrouvable(typePizza); } } }
Classe Main :
J’ai ajouté une Pizza Végétarienne qui n’existe pas en ajoutant une Exception pour la traiter.
package fr.mer.gestion.semaine3.factory; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { PizzaService service = new PizzaService(); List<Pizza> pizzas_commandees = new ArrayList<>(); // liste des types de pizza à commander... String[] typesPizzas = {"Margherita", "Reine", "4_Fromages", "Végétarienne"}; for (String type : typesPizzas) { try { Pizza pizza = service.creerUnePizzaSelonSonType(type); pizzas_commandees.add(pizza); } catch (ExceptionPizzaIntrouvable e) { System.out.println(e.getMessage()); } } // affichage des pizzas commandées for (Pizza pizza : pizzas_commandees) { pizza.afficher(); } } }
Classe ExceptionPizzaIntrouvable :
package fr.mer.gestion.semaine3.factory; public class ExceptionPizzaIntrouvable extends Exception { /** * Méthode pour gérer l'exception spécifique * @param typeSouhaite */ public ExceptionPizzaIntrouvable(String typeSouhaite) { super("Désolé, ce type de Pizza "+ typeSouhaite+" n'existe pas encore !"); } }
Classe Logger :
public class Logger { public void log(String message) { System.out.println("LOG: " + message); } }
Classe main :
public class Main { public static void main(String[] args) { Logger logger1 = new Logger(); Logger logger2 = new Logger(); System.out.println("logger1 : " + logger1); System.out.println("logger2 : " + logger2); // Affiche deux références différentes } }
public class Logger { private static Logger instance; // Unique instance private Logger() {} // Constructeur privé public static Logger getInstance() { if (instance == null) { instance = new Logger(); } return instance; } public void log(String message) { System.out.println("LOG: " + message); } }
public class Main { public static void main(String[] args) { Logger logger1 = Logger.getInstance(); Logger logger2 = Logger.getInstance(); System.out.println("logger1 : " + logger1); System.out.println("logger2 : " + logger2); // Affiche la même référence logger1.log("Début de l'application"); logger2.log("Fin de l'application"); } }
Classe Livre :
public class Livre { private int id; private String titre; private String auteur; public Livre(int id, String titre, String auteur) { this.id = id; this.titre = titre; this.auteur = auteur; } // Getters et setters public int getId() { return id; } public String getTitre() { return titre; } public String getAuteur() { return auteur; } @Override public String toString() { return id + " - " + titre + " (" + auteur + ")"; } }
Interface LivreDAO :
import java.util.List; public interface LivreDAO { void save(Livre livre); Livre findById(int id); List<Livre> findAll(); boolean deleteById(int id); }
Classe LivreDAOMemory :
import java.util.ArrayList; import java.util.List; public class LivreDAOMemory implements LivreDAO { private List<Livre> livres = new ArrayList<>(); private int nextId = 1; @Override public void save(Livre livre) { if (livre.getId() == 0) { livre = new Livre(nextId++, livre.getTitre(), livre.getAuteur()); } livres.add(livre); } @Override /** * Méthode qui permet en programmation fonctionnelle de simplifier la recherche d'un livre. * return Livre */ public Livre findById(int id) { return livres.stream() .filter(l -> l.getId() == id) .findFirst() .orElse(null); } @Override public List<Livre> findAll() { return new ArrayList<>(livres); } @Override public boolean deleteById(int id) { return livres.removeIf(l -> l.getId() == id); } }
Classe BibliothequeService :
import java.util.List; public class BibliothequeService { private LivreDAO livreDAO; public BibliothequeService(LivreDAO livreDAO) { this.livreDAO = livreDAO; } public void ajouterLivre(Livre livre) { livreDAO.save(livre); } public Livre trouverLivreParId(int id) { return livreDAO.findById(id); } public List<Livre> listerLivres() { return livreDAO.findAll(); } public boolean supprimerLivre(int id) { return livreDAO.deleteById(id); } }
Classe Main (pour tester) :
public class Main { public static void main(String[] args) { LivreDAO livreDAO = new LivreDAOMemory(); BibliothequeService service = new BibliothequeService(livreDAO); // Ajouter des livres service.ajouterLivre(new Livre(1, "Le Petit Prince", "Antoine de Saint-Exupéry")); service.ajouterLivre(new Livre(2, "1984", "George Orwell")); service.ajouterLivre(new Livre(3, "Harry Potter", "J.K. Rowling")); // Afficher tous les livres System.out.println("Liste des livres :"); service.listerLivres().forEach(System.out::println); // Rechercher un livre Livre livre = service.trouverLivreParId(2); System.out.println("\nLivre trouvé : " + livre); // Supprimer un livre service.supprimerLivre(1); System.out.println("\nListe après suppression :"); service.listerLivres().forEach(System.out::println); } }
Classe Ordinateur :
package fr.mer.gestion.semaine3.builder; public class Ordinateur { private String processeur; private String ram; // "16 Go" private String stockage; // "512 Go SSD" private String carteGraphique; // Optionnelle private String systeme; // "Windows 11" // constructeur privé (seul le Builder peut l'appeler) private Ordinateur() {} // getters (optionnels, pour accéder aux attributs si nécessaire) public String getProcesseur() { return processeur; } public String getRam() { return ram; } public String getStockage() { return stockage; } public String getCarteGraphique() { return carteGraphique; } public String getSysteme() { return systeme; } // Afficher la configuration public void afficherConfiguration() { System.out.println("--- Configuration de l'ordinateur ---"); System.out.println("Processeur : " + processeur); System.out.println("RAM : " + ram); System.out.println("Stockage : " + stockage); System.out.println("Carte graphique : " + (carteGraphique != null ? carteGraphique : "Intégrée")); System.out.println("Système d'exploitation : " + systeme); System.out.println("--------------------------------------"); } // classe interne : Builder public static class Builder { // on instancie bien notre ordinateur private Ordinateur ordinateur = new Ordinateur(); // les méthodes pour définir chaque attribut (retournent this pour l'enchaînement) public Builder avecProcesseur(String processeur) { ordinateur.processeur = processeur; return this; } public Builder avecRam(String ram) { ordinateur.ram = ram; return this; } public Builder avecStockage(String stockage) { ordinateur.stockage = stockage; return this; } public Builder avecCarteGraphique(String carteGraphique) { ordinateur.carteGraphique = carteGraphique; return this; } public Builder avecSysteme(String systeme) { ordinateur.systeme = systeme; return this; } // méthode pour construire l'objet final public Ordinateur build() { // Validation minimale (exemple : processeur et RAM obligatoires) if (ordinateur.processeur == null || ordinateur.ram == null) { throw new IllegalStateException("Processeur et RAM sont obligatoires !"); } return ordinateur; } } }
package fr.mer.gestion.semaine3.builder; public class MainOrdinateur { public static void main(String[] args) { // PC bureautique simple Ordinateur pcBureautique = new Ordinateur.Builder() .avecProcesseur("Intel Core i5") .avecRam("8 Go") .avecStockage("256 Go SSD") .avecSysteme("Windows 10") .build(); // PC gamer Ordinateur pcGamer = new Ordinateur.Builder() .avecProcesseur("AMD Ryzen 7") .avecRam("32 Go") .avecStockage("1 To SSD") .avecCarteGraphique("NVIDIA RTX 4080") .avecSysteme("Windows 11") .build(); // PC sans carte graphique Ordinateur pcSansCG = new Ordinateur.Builder() .avecProcesseur("Intel Core i3") .avecRam("4 Go") .avecStockage("500 Go HDD") .avecSysteme("Linux") .build(); // affichage des configurations pcBureautique.afficherConfiguration(); pcGamer.afficherConfiguration(); pcSansCG.afficherConfiguration(); } }