import java.util.ArrayList; import java.util.List; /** feuille du motif composite */ public class Chef extends Person { private List subalternes = new ArrayList(); private Integer avec,sans = null; public boolean addSubalterne(Person p){ return subalternes.add(p); } /** constructeur * * @param n fun factor * */ public Chef(int n){ super(n); // d'autres choses peut-être. } /** * 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. * */ public int bestPartyWithoutMe(){ if (this.sans != null) { return this.sans; } int output = 0; for (Person person : subalternes) { output += person.bestParty(); } this.sans = output; return output; } /** * 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. * */ private int bestPartyWithMe(){ if (this.avec != null) { return this.avec; } int output = getFunFactor(); for (Person person : subalternes) { output += person.bestPartyWithoutMe(); } this.avec = output; return output; } /** * 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). * */ public int bestParty(){ if (this.avec != null && this.sans != null) { if (this.avec > sans) { return this.avec; } else { return this.sans; } } this.avec = this.bestPartyWithMe(); this.sans = this.bestPartyWithoutMe(); if (this.avec > this.sans) { return this.avec; } else { return this.sans; } } }