Bu makale, tasarım desenleri kavramıyla ilk kez karşılaşan, singleton terimini duyan veya bir şekilde singleton modelini uygulayan ancak ne olduğunu anlamayan herkese yöneliktir. Hoş geldin! CodeGym öğrencileri tasarım modelleriyle ilk kez 15. Seviyede karşılaşıyorlar; kaptan beklenmedik bir şekilde onlardan Java Singleton modelini tembel uygulamayla uygulayarak anlayışlarını "güçlendirmelerini" istiyor. Singleton kalıbını ilk kez duyan öğrencilerin hemen birçok sorusu olur: Dünyada bir tasarım kalıbı nedir? Neden buna ihtiyacımız var? singleton nedir ? Ve son olarak, tembel uygulama nedir? Sırasıyla bu soruları cevaplayalım.
Singleton modeli de bunlardan sadece bir tanesi.
Örneğin, blackjack ve sayılarla kendi sıralama algoritmanızı oluşturabilirsiniz.ve bunu yapmak için çok zaman harcayın ya da uzun zamandır anlaşılan ve tarif edilen birini uygulayabilirsiniz. Aynısı tasarım desenleri için de geçerlidir. Ek olarak, tasarım kalıpları ile kod daha standart hale gelir ve uygun kalıbı kullandığınızda, kalıbın yaygın tuzakları uzun zaman önce belirlenip ortadan kaldırıldığı için hata yapma olasılığınız azalır. Her şeyin ötesinde, kalıp bilgisi programcıların birbirlerini daha iyi anlamalarına yardımcı olur. Programcı arkadaşlarınıza uzun bir açıklama sağlamaya çalışmak yerine, basitçe bir kalıbın adını söyleyebilirsiniz. Özetle, tasarım kalıpları size şu konularda yardımcı olur:
Bu bölümü sonlandırmak için, tüm tasarım kalıpları gövdesinin üç büyük gruba ayrılabileceğini not ediyoruz:
Dünyada bir tasarım deseni nedir?
Bu soruyu en iyi anlayışla cevaplamak için biraz tarihin olduğuna inanıyorum. İlginç bir fikirle ortaya çıkan dört ünlü programlama yazarı (Erich Gamma, John Vlissides, Ralph Johnson ve Richard Helm) var. Yazılım geliştirmenin genellikle yaklaşık olarak aynı sorunları çözmelerini ve aynı şekilde yapılandırılmış kod yazmalarını gerektirdiğini fark ettiler. Bu nedenle, nesne yönelimli programlamada sıklıkla kullanılması gereken tipik kalıpları tanımlamaya karar verdiler. Kitapları 1994 yılında Design Patterns: Elements of Reusable Object-Oriented Software başlığı altında yayınlandı. Kitabın adı çok uzun çıktı ve insanlar ona Dörtlü Çete'nin kitabı demeye başladılar. İlk baskı 23 desen içeriyordu. Daha sonra düzinelerce başka model keşfedildi.Bir tasarım deseni, ortak bir soruna standartlaştırılmış bir çözümdür. |
Neden tasarım modellerine ihtiyacımız var?
Kalıpları bilmeden programlayabilirsiniz: Sonuçta, Seviye 15'e geldiğinizde, CodeGym'de var olduklarını bile bilmeden yüzlerce mini program yazmışsınızdır. Bu, tasarım kalıplarının, ustayı amatörden ayıran bir tür araç olduğunu düşündürür: Tasarım kalıpları, tipik bir sorunun nasıl düzgün bir şekilde çözüleceğini tanımlar. Bu, kalıpları bilmenin size zaman kazandırdığı anlamına gelir. Bu yönüyle algoritmalara benzerler.
|

Son olarak, singleton modeli
Singleton yaratıcı bir kalıptır . Bu kalıp, bir sınıfın yalnızca bir örneğinin olmasını sağlar ve bu nesne için genel bir erişim noktası sağlar. Açıklamadan, bu modelin iki durumda uygulanması gerektiği açık olmalıdır:- programınız belirli bir sınıftan birden fazla nesnenin oluşturulmasını gerektirmediğinde. Örneğin, bir bilgisayar oyununda bir Kahraman sınıfı ve oyundaki tek kahramanı tanımlayan yalnızca bir Kahraman nesnesi olabilir.
- bir nesneye küresel erişim için bir nokta sağlamanız gerektiğinde. Başka bir deyişle, nesneyi programın herhangi bir yerinden kullanılabilir hale getirmeniz gerekir. Ne yazık ki, yazmaya karşı korumalı olmadığı için yalnızca bir küresel değişken oluşturmak yeterli değildir: herkes değişkenin değerini değiştirebilir, bu nedenle nesnenin genel erişim noktası kaybolabilir. Bir Singleton'ın bu özellikleri , örneğin bir veritabanıyla çalışan bir nesneye sahip olduğunuzda ve veritabanına programın farklı bölümlerinden erişmeniz gerektiğinde gereklidir. Singleton , hiç kimsenin daha önce oluşturulan örneği değiştiren kod yazmamasını sağlar.
-
Yavaş başlatmalı bir Singleton örneği bulun .
-
Aynı prensibi kullanarak ayrı dosyalarda üç tekil sınıf oluşturun - Güneş, Ay, Dünya.
-
UygulamakGezegenGüneş , Ay ve Dünya sınıflarında arayüz .
- Solution sınıfının statik bloğunda,readKeyFromConsoleAndInitPlanetyöntem.
-
uygulamakreadKeyFromConsoleAndInitPlanetyöntem işlevselliği:
-
5.1. Konsoldan bir String parametresi okuyun
-
5.2. Parametre aşağıdakilerden birine eşitseGezegenarayüzün sabitleri, uygun thePlanet nesnesini oluşturun.
-
-
Sınıfa, tek bir nesneyi depolayan özel bir statik alan vermeniz gerekir:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; // #1 }
-
(Varsayılan) yapıcıyı özel yapın. Bu, sınıf dışından erişilemeyeceği ve yeni nesneler döndüremeyeceği anlamına gelir:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} // #2 }
-
Singleton'ı almak için kullanılacak statik bir oluşturma yöntemi bildirin:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton() {} public static LazyInitializedSingleton getInstance() { // #3 if (instance == null) { // If the object has not yet been created instance = new LazyInitializedSingleton(); // Create a new object } return instance; // Return the previously created object } }
GO TO FULL VERSION