Abstract Factory Design Pattern: Bir nesne ailesi oluşturmak için soyut bir arayüz sağlar. Ardından, bu arayüzü uygulayan farklı fabrika sınıfları, farklı nesne ailelerini oluşturabilir. Bu pattern ile ilgili nesne gruplarının bir arada kullanılması gerektiği durumlarda kullanılır ve sistemlerin daha kolay genişletilmesini sağlar.
Örnek olarak; bir mobilya üretim uygulamasını düşünelim. Bu uygulamada, farklı mobilya parçalarının üretimi için Abstract Factory Design Patterni kullanabiliriz.
public interface Chair {
void sitOn();
}
public class WoodenChair implements Chair{
@Override
public void sitOn() {
System.out.println("Ahşap sandelyeye oturdu.");
}
}
public class MetalChair implements Chair {
@Override
public void sitOn() {
System.out.println("Metal sandelyeye oturdu.");
}
}
public interface Table {
void putOn();
}
public class WoodenTable implements Table {
@Override
public void putOn() {
System.out.println("Ahşap masaya bir şey koydu.");
}
}
public class MetalTable implements Table {
@Override
public void putOn() {
System.out.println("Metal masaya bir şey koydu.");
}
}
public interface FurnitureFactory {
Chair createChair();
Table createTable();
}
public class WoodenFurnitureFactory implements FurnitureFactory {
@Override
public Chair createChair() {
return new WoodenChair();
}
@Override
public Table createTable() {
return new WoodenTable();
}
}
public class MetalFurnitureFactory implements FurnitureFactory{
@Override
public Chair createChair() {
return new MetalChair();
}
@Override
public Table createTable() {
return new MetalTable();
}
}
private static void createFurniture(FurnitureFactory factory) {
Chair chair = factory.createChair();
Table table = factory.createTable();
chair.sitOn();
table.putOn();
}
private static void abstractFactoryDesignPatter(){
createFurniture(new WoodenFurnitureFactory());
createFurniture(new MetalFurnitureFactory());
}
public static void main(String[] args) {
// Abstract Factory Design Pattern
abstractFactoryDesignPatter();
}
Bu örnekte, Chair ve Table arayüzleri iki farklı mobilya parçasını temsil ediyor. Ahşap ve metal için farklı somut mobilya parçaları bu arayüzlere uyguladık. FurnitureFactory arayüzü, bu mobilya parçalarını oluşturmak için gerekli methodları tanımladık. WoodenFurnitureFactory ve MetalFurnitureFactory gibi classlarda, belirli bir malzeme tipi için ilgili mobilya parçalarını oluşturduk. En son adımda, Main sınıfında, farklı malzeme tipleri için mobilya setleri oluşturmak için soyut fabrika desenini kullanarak bu desenin nasıl kullanılacağını göstermiş olduk.