Design Pattern - Factory Pattern
O padrão de fábrica é um dos padrões de design mais usados em Java. Esse tipo de padrão de design está incluído no padrão de criação, pois esse padrão fornece uma das melhores maneiras de criar um objeto.
No padrão de fábrica, criamos o objeto sem expor a lógica de criação ao cliente e nos referimos ao objeto recém-criado usando uma interface comum.
Implementação
Vamos criar uma interface Shape e classes concretas implementando a interface Shape . Uma classe de fábrica ShapeFactory é definida como uma próxima etapa.
FactoryPatternDemo , nossa classe de demonstração usará ShapeFactory para obter um objeto Shape . Ele vai passar informações ( CÍRCULO / RETANGLE / QUADRADO ) para a ShapeFactory para obter o tipo de objeto de que precisa.
Passo 1
Crie uma interface.
Shape.java
public interface Shape {
void draw();
}
Passo 2
Crie classes concretas implementando a mesma interface.
Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
Square.java
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
etapa 3
Crie uma Factory para gerar objetos de classe concreta com base nas informações fornecidas.
ShapeFactory.java
public class ShapeFactory {
//use getShape method to get object of type shape
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
} else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
Passo 4
Use o Factory para obter o objeto da classe concreta passando uma informação como tipo.
FactoryPatternDemo.java
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
//get an object of Circle and call its draw method.
Shape shape1 = shapeFactory.getShape("CIRCLE");
//call draw method of Circle
shape1.draw();
//get an object of Rectangle and call its draw method.
Shape shape2 = shapeFactory.getShape("RECTANGLE");
//call draw method of Rectangle
shape2.draw();
//get an object of Square and call its draw method.
Shape shape3 = shapeFactory.getShape("SQUARE");
//call draw method of square
shape3.draw();
}
}
Etapa 5
Verifique a saída.
Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.