import java.util.LinkedHashSet; import java.util.Objects; import java.util.ArrayList; import java.util.List; /** feuille du motif composite */ public class Chef extends Person { private final List subalternes; /** constructeur * * @param n fun factor */ public Chef(int n) { super(n); this.subalternes = new ArrayList<>(); } /** * Ajoute un subalterne au chef * @param p la personne à ajouter */ public void addSubalterne(Person p) { if (p != null) subalternes.add(p); } /** * La meilleure fête avec moi, c'est la meilleure fête sans mes subalternes pour eux plus moi. * * @return retourne la valeur de la meilleure fête en invitant seulement les gens dont cette personne est le ou la supérieure hiérarchique, mais pas elle. */ @Override public int bestPartyWithoutMe() { int sum = 0; for (Person subalterne : subalternes) { sum += subalterne.bestParty(); // Additionne les meilleures fêtes de chaque subalterne } return sum; } /** * La meilleure fête est soit sans moi (c'est l'union des meilleures fêtes de mes subalternes), * soit c'est la meilleure fête avec moi. * * @return la valeur de la meilleure fête en invitant seulement les gens dont cette personne est le ou la supérieure hiérarchique (peut-être avec elle). */ @Override public int bestParty() { int withMe = getFunFactor(); // Inclure le chef for (Person subalterne : subalternes) { withMe += subalterne.bestPartyWithoutMe(); // Ajouter les meilleures fêtes sans chaque subalterne } int withoutMe = bestPartyWithoutMe(); // Meilleure fête sans inclure le chef return Math.max(withMe, withoutMe); // Retourner la meilleure des deux options } }