Tasarım Deseni - Fabrika Deseni
Fabrika kalıbı, Java'da en çok kullanılan tasarım kalıplarından biridir. Bu desen türü, bir nesneyi yaratmanın en iyi yollarından birini sağladığından, bu tür bir tasarım deseni yaratımsal modele girer.
Fabrika modelinde, oluşturma mantığını müşteriye göstermeden nesne oluştururuz ve ortak bir arayüz kullanarak yeni oluşturulan nesneye başvururuz.
Uygulama
Biz oluşturmak için gidiyoruz Şekli arayüzü ve uygulama beton sınıfları Şekli arayüzü. Bir fabrika sınıfı ShapeFactory , sonraki adım olarak tanımlanır.
FactoryPatternDemo , demo sınıfımız bir Shape nesnesi almak için ShapeFactory kullanacaktır . İhtiyaç duyduğu nesne türünü elde etmek için bilgileri ( DAİRE / DİKDÖRTGEN / KARE ) ShapeFactory'ye iletecektir .
Aşama 1
Bir arayüz oluşturun.
Shape.java
public interface Shape {
void draw();
}
Adım 2
Aynı arayüzü uygulayan somut sınıflar oluşturun.
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.");
}
}
Aşama 3
Verilen bilgilere dayanarak somut sınıf nesnesi oluşturmak için bir Fabrika oluşturun.
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;
}
}
4. adım
Tür gibi bir bilgi ileterek somut sınıfın nesnesini elde etmek için Fabrikayı kullanın.
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();
}
}
Adım 5
Çıkışı doğrulayın.
Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.