Example #1
0
  public static void main(String[] args) throws Exception {

    AnimalFactory abstractAnimFactory = new AnimalFactory();
    SpeciesFactory speciesFactoryArray[] = new SpeciesFactory[5];
    speciesFactoryArray[0] = abstractAnimFactory.getSpeciesFactory(Constants.Species.Mammals);
    speciesFactoryArray[1] = abstractAnimFactory.getSpeciesFactory(Constants.Species.Reptiles);
    speciesFactoryArray[2] = abstractAnimFactory.getSpeciesFactory(Constants.Species.Birds);
    speciesFactoryArray[3] = abstractAnimFactory.getSpeciesFactory(Constants.Species.Aquatics);
    speciesFactoryArray[4] = abstractAnimFactory.getSpeciesFactory(Constants.Species.Insects);
    //		List<Mammal> mammals = new ArrayList<>();

    String animalsSubclasses[] = new String[3];

    int limit = 5;
    Animal animalsArray[] = new Animal[limit * 5];
    Random randomGenerator = new Random();
    int randomInt;
    // I will populate the zoo will animals of all species
    // MAMMALS
    animalsSubclasses[0] = Constants.Animals.Mammals.Tiger;
    animalsSubclasses[1] = Constants.Animals.Mammals.Monkey;
    animalsSubclasses[2] = Constants.Animals.Mammals.Cow;

    for (int i = 0; i < limit; i++) {
      randomInt = randomGenerator.nextInt(i + 1);
      animalsArray[i] = speciesFactoryArray[0].getAnimal(animalsSubclasses[randomInt % 3]);
    }
    limit += 5;
    // REPTILES
    animalsSubclasses[0] = Constants.Animals.Reptiles.Crocodile;
    animalsSubclasses[1] = Constants.Animals.Reptiles.Turtle;
    animalsSubclasses[2] = Constants.Animals.Reptiles.Snake;
    for (int i = limit - 5; i < limit; i++) {
      randomInt = randomGenerator.nextInt(i + 1);
      animalsArray[i] = speciesFactoryArray[1].getAnimal(animalsSubclasses[randomInt % 3]);
    }
    limit += 5;
    // BIRDS
    animalsSubclasses[0] = Constants.Animals.Birds.Ostrich;
    animalsSubclasses[1] = Constants.Animals.Birds.Owl;
    animalsSubclasses[2] = Constants.Animals.Birds.Woodpecker;
    for (int i = limit - 5; i < limit; i++) {
      randomInt = randomGenerator.nextInt(i + 1);
      animalsArray[i] = speciesFactoryArray[2].getAnimal(animalsSubclasses[randomInt % 3]);
    }
    limit += 5;
    // AQUATICS
    animalsSubclasses[0] = Constants.Animals.Aquatics.Trout;
    animalsSubclasses[1] = Constants.Animals.Aquatics.Catfish;
    animalsSubclasses[2] = Constants.Animals.Aquatics.Shark;
    for (int i = limit - 5; i < limit; i++) {
      randomInt = randomGenerator.nextInt(i + 1);
      animalsArray[i] = speciesFactoryArray[3].getAnimal(animalsSubclasses[randomInt % 3]);
    }
    limit += 5;
    // INSECTS
    animalsSubclasses[0] = Constants.Animals.Insects.Butterfly;
    animalsSubclasses[1] = Constants.Animals.Insects.Spider;
    animalsSubclasses[2] = Constants.Animals.Insects.Cockroach;
    for (int i = limit - 5; i < limit; i++) {
      randomInt = randomGenerator.nextInt(i + 1);
      animalsArray[i] = speciesFactoryArray[4].getAnimal(animalsSubclasses[randomInt % 3]);
    }
    // Now I will create some caretakers
    EmployeeAbstractFactory abstractEmpFactory = new EmployeeAbstractFactory();
    EmployeeFactory caretakerFactory =
        abstractEmpFactory.getEmployeeFactory(Constants.Employees.Caretaker);
    int empLimit = 15;
    Employee caretakerArray[] = new Employee[empLimit];

    for (int i = 0; i < empLimit; i++) {
      caretakerArray[i] = caretakerFactory.getEmployee();
    }

    // the algorithm
    for (Employee c : caretakerArray) {
      for (Animal a : animalsArray) {
        if ((c.getIsDead() == false) && (a.getTakenCareOf() == false)) {
          String result = c.takeCareOf(a);
          if (result.equals(Constants.Employees.Caretakers.TCO_KILLED)) {
            c.setIsDead(true);
          } else if (result.equals(Constants.Employees.Caretakers.TCO_NO_TIME)) {
            continue;
          } else {
            a.setTakenCareOf(true);
          }
        }
      }
    }

    boolean ok = true;
    for (Animal a : animalsArray)
      if (a.getTakenCareOf() == false) {
        ok = false;
        break;
      }

    if (ok == true) {
      System.out.println("All animals have been taken care of.");
    } else {
      System.out.println("Not all animals have been taken care of.");
    }
  }