57 lines
1.8 KiB
Java
57 lines
1.8 KiB
Java
|
|
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<Person> 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
|
||
|
|
}
|
||
|
|
}
|