Sunday, 29 September 2013

Abstract Factory Design Pattern - Implementation


Click here to watch in Youtube : https://www.youtube.com/watch?v=Bbjh8atQJz0

Click the below Image to Enlarge
Abstract Factory Design Pattern - Implementation - Class Diagram





















Animal.java

public interface Animal
{
public String speak();
}


Cat.java

public class Cat implements Animal
{

@Override
public String speak()
{
return "Meow Meow Meow";
}

}


Dog.java

public class Dog implements Animal
{

@Override
public String speak()
{
return "Bark Bark Bark";
}

}


Lion.java

public class Lion implements Animal
{

@Override
public String speak()
{
return "Roar";
}

}


Octopus.java

public class Octopus implements Animal
{
@Override
public String speak()
{
return "SQUAWCK";
}
}


Shark.java

public class Shark implements Animal
{
@Override
public String speak()
{
return "Cannot Speak";
}
}


AnimalFactory.java

public abstract class AnimalFactory
{
public abstract Animal getAnimal( String animalType );
public static AnimalFactory getAnimalFacory(String factoryType)
{
AnimalFactory animalFactory = null ;
if("sea".equals(factoryType))
{
animalFactory = new SeaAnimalFactory();
}
else
{
animalFactory = new LandAnimalFactory();
}
return animalFactory;
}

}


LandAnimalFactory.java

public class LandAnimalFactory extends AnimalFactory
{
public Animal getAnimal( String animalType )
{
Animal animal = null;
if( "dog".equals(animalType) )
{
animal = new Dog();
}
else if( "cat".equals(animalType) )
{
animal = new Cat();
}
else if( "lion".equals(animalType) )
{
animal = new Lion();
}
return animal;
}
}


SeaAnimalFactory.java

public class SeaAnimalFactory extends AnimalFactory
{
public Animal getAnimal( String animalType )
{
Animal animal = null;
if( "shark".equals(animalType) )
{
animal = new Shark();
}
else if( "octopus".equals(animalType) )
{
animal = new Octopus();
}
return animal;
}
}


Client.java

public class Client
{

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.getAnimalFacory("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.getAnimalFacory("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);

}
}


Output

Animal Factory type : SeaAnimalFactory

Animal Type : Shark
shark speak : Cannot Speak

Animal Type : Octopus
octopus speak : SQUAWCK
---------------------------------------------------------
Animal Factory type : LandAnimalFactory

Animal Type : Dog
dog speak : Bark Bark Bark

Animal Type : Cat
cat speak : Meow Meow Meow

Animal Type : Lion
lion speak : Roar

No comments:

Post a Comment

Google+ Followers

Google+ Badge