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();
}
}
Bir yanıt yazın