Kod Sörfü

Dalgalan her satırda, keşfet sonsuz kod okyanusunu.

Yaratıcı Kalıplar (Creational Patterns)

Yaratıcı Kalıplar (Creational Patterns)

Yaratıcı tasarım kalıpları, nesne yaratma mekanizmalarını soyutlayarak, sistemin hangi nesneleri kullanacağını belirlemede esneklik sağlar. Java’da sık kullanılan yaratıcı kalıplar arasında Singleton, Factory Method, Abstract Factory, Builder ve Prototype bulunur. Örneğin, Singleton kalıbı, bir sınıftan yalnızca bir nesne üretilmesini ve bu nesnenin global bir erişim noktasına sahip olmasını sağlar. Bu, özellikle kaynakların paylaşılması gereken durumlarda kullanışlıdır.

Singleton

Tanım: Bir sınıftan yalnızca bir nesne üretmeyi ve bu nesneye global bir erişim noktası sağlamayı amaçlar. Örnek: Veritabanı bağlantısı için kullanılan bir sınıf, uygulamanın her yerinden erişilebilir tek bir nesne olarak tasarlanabilir. Böylece, her seferinde yeni bir bağlantı açmak yerine, uygulama genelinde tek bir bağlantı nesnesi yeniden kullanılabilir.

Factory Method

Tanım: Nesne yaratma sorumluluğunu alt sınıflara devrederek, hangi sınıfın örneğinin yaratılacağına alt sınıfların karar vermesini sağlar. Örnek: Bir lojistik yönetim sistemi, farklı taşıma yöntemleri (kara, deniz, hava) için araç nesneleri yaratmalıdır. Factory Method, taşıma türüne göre uygun araç nesnesinin yaratılmasını alt sınıflara bırakır.

Singleton

public class DatabaseConnection {
    private static DatabaseConnection instance;

    private DatabaseConnection() {
        // private constructor to prevent instantiation
    }

    public static synchronized DatabaseConnection getInstance() {
        if (instance == null) {
            instance = new DatabaseConnection();
        }
        return instance;
    }

    public void connect() {
        System.out.println("Database Connection Established");
    }
}

// Kullanımı
public class Main {
    public static void main(String[] args) {
        DatabaseConnection dbConnection = DatabaseConnection.getInstance();
        dbConnection.connect();
    }
}

Factory Method

public interface Transport {
    void deliver();
}

public class Truck implements Transport {
    @Override
    public void deliver() {
        System.out.println("Delivery by land in a box.");
    }
}

public class Ship implements Transport {
    @Override
    public void deliver() {
        System.out.println("Delivery by sea in a container.");
    }
}

public abstract class Logistics {
    public abstract Transport createTransport();

    public void planDelivery() {
        Transport transport = createTransport();
        transport.deliver();
    }
}

public class RoadLogistics extends Logistics {
    @Override
    public Transport createTransport() {
        return new Truck();
    }
}

public class SeaLogistics extends Logistics {
    @Override
    public Transport createTransport() {
        return new Ship();
    }
}

// Kullanımı
public class Main {
    public static void main(String[] args) {
        Logistics logistics = new RoadLogistics();
        logistics.planDelivery();

        logistics = new SeaLogistics();
        logistics.planDelivery();
    }
}
Mehmet Alp avatarı

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Mehmet Alp Albayraktaroğlu

LinkedIn’de benimle iletişime geçmekten çekinmeyin veya bana bir e-posta gönderin—teknolojiyle ilgili her şeyi konuşmaktan mutluluk duyarım! 🚀👩‍💻