Factory Method Pattern, yazılım geliştirme süreçlerinde sıkça kullanılan ve nesne oluşturma sürecini alt sınıflara bırakan bir tasarım desenidir. Bu desen, bir sınıfın nesnelerini oluşturmak yerine, bu işlemi alt sınıfların gerçekleştirmesine olanak tanır. Böylece, yeni tür nesneler eklemek ve mevcut nesneleri değiştirmek kolaylaşır.
İçerik
Neden Factory Method Pattern Kullanılır?
- Esneklik: Nesne oluşturma mantığını alt sınıflara devrederek, ana sınıfın kodunu değiştirmeden yeni tür nesneler ekleyebilirsiniz.
- Genişletilebilirlik: Alt sınıflar, Factory Method’u kullanarak kendi özel nesnelerini oluşturabilirler. Bu sayede, ana sınıf üzerinde değişiklik yapmadan yeni nesne türleri ekleyebilirsiniz.
- Bakım Kolaylığı: Nesne oluşturma kodu tek bir yerde toplandığı için, bakım ve güncellemeler daha kolaydır.

Factory Method Pattern’in Yapısı
Bu tasarım deseninde, bir Creator
sınıfı ve bir Product
arayüzü bulunur. Creator
sınıfı, nesne oluşturma işini gerçekleştiren factoryMethod()
adlı bir metot içerir. Alt sınıflar, bu metodu override ederek kendi nesnelerini oluştururlar.
Java ile Örnek Uygulama
Bu örnekte, bir bilgisayar satış mağazasını modelleyeceğiz. Computer
adında bir arayüzümüz ve bu arayüzü implement eden PC
ve Server
sınıflarımız olacak. Ayrıca, ComputerFactory
adında bir fabrika sınıfımız ve bu sınıfı genişleten PCFactory
ve ServerFactory
sınıflarımız olacak.
1: Product Arayüzü ve Somut Ürün Sınıfları
// Product interface
public interface Computer {
String getRAM();
String getHDD();
String getCPU();
}
// Concrete Product - PC
public class PC implements Computer {
private String RAM;
private String HDD;
private String CPU;
public PC(String RAM, String HDD, String CPU) {
this.RAM = RAM;
this.HDD = HDD;
this.CPU = CPU;
}
@Override
public String getRAM() {
return this.RAM;
}
@Override
public String getHDD() {
return this.HDD;
}
@Override
public String getCPU() {
return this.CPU;
}
@Override
public String toString() {
return "PC [RAM=" + RAM + ", HDD=" + HDD + ", CPU=" + CPU + "]";
}
}
// Concrete Product - Server
public class Server implements Computer {
private String RAM;
private String HDD;
private String CPU;
public Server(String RAM, String HDD, String CPU) {
this.RAM = RAM;
this.HDD = HDD;
this.CPU = CPU;
}
@Override
public String getRAM() {
return this.RAM;
}
@Override
public String getHDD() {
return this.HDD;
}
@Override
public String getCPU() {
return this.CPU;
}
@Override
public String toString() {
return "Server [RAM=" + RAM + ", HDD=" + HDD + ", CPU=" + CPU + "]";
}
}
2: Creator Sınıfı ve Somut Fabrika Sınıfları
// Creator class
public abstract class ComputerFactory {
public abstract Computer createComputer();
}
// Concrete Creator - PC Factory
public class PCFactory extends ComputerFactory {
private String RAM;
private String HDD;
private String CPU;
public PCFactory(String RAM, String HDD, String CPU) {
this.RAM = RAM;
this.HDD = HDD;
this.CPU = CPU;
}
@Override
public Computer createComputer() {
return new PC(RAM, HDD, CPU);
}
}
// Concrete Creator - Server Factory
public class ServerFactory extends ComputerFactory {
private String RAM;
private String HDD;
private String CPU;
public ServerFactory(String RAM, String HDD, String CPU) {
this.RAM = RAM;
this.HDD = HDD;
this.CPU = CPU;
}
@Override
public Computer createComputer() {
return new Server(RAM, HDD, CPU);
}
}
3: Kullanım
public class FactoryMethodPatternDemo {
public static void main(String[] args) {
ComputerFactory pcFactory = new PCFactory("16 GB", "1 TB", "2.9 GHz");
Computer pc = pcFactory.createComputer();
System.out.println("Factory PC Config::" + pc);
ComputerFactory serverFactory = new ServerFactory("32 GB", "2 TB", "3.2 GHz");
Computer server = serverFactory.createComputer();
System.out.println("Factory Server Config::" + server);
}
}
Sonuç
Factory Method Pattern, esneklik ve genişletilebilirlik sağlamak için güçlü bir tasarım desenidBu desen, nesne oluşturma işlemlerini merkezi bir yerde toplar ve böylece alt sınıfların kendi nesnelerini oluşturmalarını sağlar. Bu desen, nesne oluşturma işlemlerini merkezi bir yerde toplar. Dolayısıyla alt sınıfların kendi nesnelerini oluşturmalarına olanak tanır. Java ile yaptığımız örnekte, farklı türde bilgisayarların oluşturulmasını sağlayan bir fabrika yöntemi geliştirdik. Bu yaklaşım, yeni türler eklerken ana sınıfı değiştirme gereksinimini ortadan kaldırır böylelikle kodun bakımını kolaylaştırır.
Burada anlatılan tasarım deseninin kodlarına GitHub linki üzerinden ulaşabilirsiniz.