2017-09-04 1 views
2

Comment puis-je faire en sorte que mon programme limite la création d'instance suivante à quatre, de sorte que lorsque j'essaie de créer la cinquième école, un message d'erreur "Impossible d'enregistrer l'école Maximum atteint ". Merci comme toujoursLimiter le nombre d'instances créées à l'aide d'un constructeur avec les paramètres

public class Driver { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Header h1 = new Header(); 
     h1.schoolHeader(); 
     School s1 = new School("Pascoe Vale High School", "101"); 
     School s2 = new School("North Melbourne Primary School", "102"); 
     School s3 = new School("St Aloysuis College", "103"); 
     School s4 = new School("Coburg High School", "104"); 
     School s5 = new School("Chuka Nwobi High School", "105"); 
    } 
} 

class School { 
    public static int objCount = 0; 
    private static String regId; 
    private String name; 

    School(String name, String regId) { 
     this.name = name; 
     this.regId = regId; 
     System.out.println("*** Successfully registered " + getName()); 
     objCount++; 
    } 

    public void registerHeader() { 
     System.out.println("--- Registering Participating Schools---"); 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getRegId() { 
     return regId; 
    } 
    public void setRegId(String regId) { 
     this.regId = regId; 
    } 
} 
+0

Introduire un motif d'usine. – Flown

+1

utiliser un tableau et un nombre global ... ou dans l'école un compteur statique –

+0

Eh bien, vous avez déjà le compteur d'école statique dans votre constructeur, lancer une exception si un autre est en cours de création? – daniu

Répondre

2

Le code exemple que vous avez demandé:

static final int ALLOWED_COUNT = 4; 

public School(String name, String regId) { 
    if (objCount >= ALLOWED_COUNT) { 
     throw new TooManySchoolsException("Only " + ALLOWED_COUNT + " schools allowed!"); 
    } 
    this.name = name; 
    this.regId = regId; 
    System.out.println("*** Successfully registered " + getName()); 
    objCount++; 
} 

Honnêtement, ce n'est pas une bonne idée de le faire de cette façon. Beaucoup mieux pour permettre la création d'un nombre infini d'objets scolaires et avoir une classe distincte SchoolRegistry qui tient compte du nombre d'écoles enregistrées.

class SchoolRegistry { 
    static final int MAX_SCHOOLS = 4; 
    private List<School> schools = new ArrayList<>(); 
    public void register(School s) { 
     if (schools.size() > MAX_SCHOOLS) throw new TooManySchoolsException(); 
     schools.add(s); 
    } 
} 
+0

Deux bons points: dire sur l'erreur quel est le nombre maximum d'écoles (donc le programmeur reçoit de l'aide), et déplacer la décision vers un SchoolRegistry. Ce dernier pourrait également avoir une méthode createSchool à appeler une classe d'usine. –

+0

bon point sur la création de SchoolRegistry! – nagendra547