Neredeyse her nesneye dayalı(OOP) programda genellikle bir veya birden fazla kaynak bir kere oluşturulur ve tüm uygulamanın sürekliliği için paylaştırılır. Bu tasarımda amaç, hiçbir kopyası olmayan bir kaynağı oluşturmak ve bu kaynağa uygulamanın herhangi bir parçasında erişebilmektir.
Bu tasarıma en iyi örnek veritabanı bağlantısıdır. Her veritabanı işlemi için bir kaynağı oluşturmak çok verimsiz bir işlemdir. Bunu yerine kaynak uygulamanın başlangıcında oluşturulur, tüm işlemler bu kaynak kullanılarak gerçekleştirilir ve uygulamanın sonunda yok edilir. Veritabanı bağlantısı gibi açılan dosya, kuyruk(queue) veya yığın(stack) işlemleri bu tasarıma örnek olarak verilebilir.
Peki biz belirli bir sınıfın örneğinin(instance) tek ve kolayca erişilebilir olduğundan nasıl emin olacağız? Bu problem evrensel(global) bir değişken kullanılarak çözülebilir fakat bu sefer bu değişken uygulamanın herhangi bir bölümünde değiştirilebilir ve bu istenmeyen bir durumdur.(http://c2.com/cgi/wiki?GlobalVariablesAreBad) Belirli bir sınıfın her seferinde tek bir örneğine erişmek istiyorsak Singleton tasarım kullanmamız gerekir. Bu tasarımda sınıfımızın tek bir örneğine erişmek için sabit bir getInstance yöntemi(method) kullanırız.