@startuml
AbstractFactoryDemo - AnimalFactory : create >
AnimalFactory <|-- SeaAnimalFactory : getAnimalFactory() >
AnimalFactory <|-- LandAnimalFactory : getAnimalFactory() >
SeaAnimalFactory ... SeaAnimalFarmily : getName() >
LandAnimalFactory ... LandAnimalFarmily : getName() >
LandAnimalFarmily .... Cat: getAnimal() >
LandAnimalFarmily .... Dog: getAnimal() >
LandAnimalFarmily .... Lion: getAnimal() >
SeaAnimalFarmily .... Shark : getAnimal() >
SeaAnimalFarmily .... Octpous : getAnimal() >
class AbstractFactoryDemo{
+ public static void main(String[] args)
}
abstract class AnimalFactory {
+ abstract getAnimal() : Animal
+ {static} getAnimalFactory() : AnimalFactory
}
interface Animal {
speak() : String
}
class LandAnimalFactory{
+ getAnimal() : Animal
}
class SeaAnimalFactory{
+ getAnimal() : Animal
}
class Cat {
+ speak() : String
}
class Dog {
+ speak() : String
}
class Lion {
+ speak() : String
}
class Shark {
+ speak() : String
}
class Octpous {
+ speak() : String
}
Dog --|> Animal
Lion --|> Animal
Cat --|> Animal
Shark --|> Animal
Octpous --|> Animal
@enduml
public static void main(String[] args) {
Animal animal = null;
AnimalFactory animalFactory = null;
String speakSound = null;
// Get Factory object by passing the factory type
animalFactory = AnimalFactory.getAnimalFactory("sea");
System.out.println("Animal Factory type : " + animalFactory.getClass().getName());
System.out.println();
// Get Animal object by passing the animal type
animal = animalFactory.getAnimal("shark");
System.out.println("Animal Type : "+animal.getClass().getName());
speakSound = animal.speak();
System.out.println("shark speak : "+speakSound);
System.out.println();
animal = animalFactory.getAnimal("octopus");
System.out.println("Animal Type : "+animal.getClass().getName());
speakSound = animal.speak();
System.out.println("octopus speak : "+speakSound);
System.out.println("---------------------------------------------------------");
// Get Factory by passing the factory type
animalFactory = AnimalFactory.getAnimalFactory("land");
System.out.println("Animal Factory type : " + animalFactory.getClass().getName());
System.out.println();
// Get Animal object by passing the animal type
animal = animalFactory.getAnimal("dog");
System.out.println("Animal Type : "+animal.getClass().getName());
speakSound = animal.speak();
System.out.println("dog speak : "+speakSound);
System.out.println();
animal = animalFactory.getAnimal("cat");
System.out.println("Animal Type : "+animal.getClass().getName());
speakSound = animal.speak();
System.out.println("cat speak : "+speakSound);
System.out.println();
animal = animalFactory.getAnimal("lion");
System.out.println("Animal Type : "+animal.getClass().getName());
speakSound = animal.speak();
System.out.println("lion speak : "+speakSound);
}