Soyut fabrika metodunun temel yapısı aşağıdaki şekildedir.
Soyut fabrika tasarım kalıbı için Java yazılım diliyle hazırlanan örnek programın şeması aşağıdaki şekilde verilmiştir.
Nesneye dayalı programlamada arayüz (interface), bir sınıfta olması gereken metot ve özellikleri (property) tanımlayan yapıdır. Bu yapı, normal sınıf yapısından farklı olarak uygulamada neyin yapılacağını gösterir, fakat nasıl yapılacağı konusunu kendisinden türeyen sınıflara bırakır. Bu şekilde kalıtım sağlanmış olur. Bir sınıfın, arayüzdeki bütün metod ve özellikleri uygulamasına tamamlama (implementation) denir ve bu işlem implements kod parçasından yararlanılarak yapılır.
Aşağıdaki örnek uygulamada arayüzlerden yararlanılmıştır. Görüldüğü gibi GUIFactory ve Button arayüzleri yazılmış ve bu arayüzleri uygulayan WinFactory, WinButton ve OSXFactory, OSXButton sınıfları yazılmıştır. Bu sınıflarda da arayüzde verilen metodlar devre dışı bırakılmış (override) ve sınıfın türüne göre aynı arayüzün metodunun farklı sınıflarda neler yapacağı belirtilmiştir.
Son olarak da Application ve ApplicationRunner sınıfları yazılmıştır. ApplicationRunner sınıfında, belirtilen dosyadan yaratılacak fabrikanın hangi tip olacağı okunur ve okunan değere göre kullanılacak fabrika belirlenir.
Application sınıfının yapıcı metodunda, okunan fabrika tipine göre oluşturulacak buton, override edilmiş createButton metodu kullanılarak oluşturulur.
Programın ekran çıktısı kullanılan fabrikanın tipine göre WinButton veya OSXButton olacaktır. Bununla birlikte, uygulama ne çeşit fabrika verildiğini ve fabrikanın ne çeşit buton üreteceğini bilemez.
Java Soyut Fabrika Örneği (Abstract Factory Example)
interface GUIFactory
{
public Button createButton();
}
class WinFactory implements GUIFactory
{
public Button createButton()
{
return new WinButton();
}
}
class OSXFactory implements GUIFactory
{
public Button createButton()
{
return new OSXButton();
}
}
interface Button
{
public void paint();
}
class WinButton implements Button
{
public void paint()
{
System.out.println("WinButton");
}
}
class OSXButton implements Button
{
public void paint()
{
System.out.println("OSXButton");
}
}
class Application
{
public Application(GUIFactory factory)
{
Button button = factory.createButton();
button.paint();
}
}
public class ApplicationRunner
{
public static void main(String[] args)
{
new Application(createOsSpecificFactory());
}
public static GUIFactory createOsSpecificFactory() {
int sys = readFromConfigFile("OS_TYPE");
if (sys == 0)
{
return new WinFactory();
}
else
{
return new OSXFactory();
}
}
}