مرحبًا بالجميع، جافا راش!
سأخبركم اليوم عن نمط التصميمSingleton
(فردي). الهدف: إنشاء فئة تحتوي على كائن واحد فقط. وهذا يعني أنه بغض النظر عن عدد مرات الوصول إليه، سيتم إرجاع نفس الكائن الذي تم إنشاؤه في المرة الأولى. هذا شيء مناسب وضروري في العديد من الأماكن، فليس من قبيل الصدفة أن يتم تنفيذه في الأطر. طلب:
- على سبيل المثال، تحتاج إلى توصيل قاعدة بيانات بمشروع والفئة التي ستكون مسؤولة عن الاتصال به. يتم إنشاء الاتصال مرة واحدة وليس هناك حاجة إلى إنشائه مرارًا وتكرارًا
Application settings
- فئة مسؤولة عن إعدادات الاتصال اللازمة للتطبيق: مضيف قاعدة البيانات والمنفذ، وما إلى ذلك. يتم إنشاؤها مرة واحدة ويتم استخدامها طوال عملية تشغيل التطبيق.- هناك العديد من الأمثلة التي لم أذكرها، لذا اكتب خياراتك في التعليقات! =)
getInstance()
توفر كائنًا.
public class Singleton {
private static Singleton instance;
private Singleton () {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
توجد مشكلات في تعدد مؤشرات الترابط ومن ثم يمكنك وضع getInstance()
علامة على الطريقة synchronized
:
public class Singleton {
private static Singleton instance;
private Singleton () {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
وفي النهاية، كالعادة، أريد أن أقول إن كنت تفكر بشكل مختلف أو وجدت خطأ فيّ، فاكتب في التعليقات! سنناقش كل شيء بكل سرور :) إذا أعجبك المقال اكتب "+" وسأعرف ذلك. هذا مهم بالنسبة لي :) ملاحظة: أقوم بإضافة المزيد من التطبيقات: وفقًا لجوشوا بلوخ ، هذه هي أفضل طريقة لتنفيذ القالبEnum Singleton
public enum Singleton {
INSTANCE;
}
Double Checked Locking & volatile
public class Singleton {
private static volatile Singleton instance;
public static Singleton getInstance() {
Singleton localInstance = instance;
if (localInstance == null) {
synchronized (Singleton.class) {
localInstance = instance;
if (localInstance == null) {
instance = localInstance = new Singleton();
}
}
}
return localInstance;
}
}
ومزيد من On Demand Holder idiom
:
public class Singleton {
public static class SingletonHolder {
public static final Singleton HOLDER_INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.HOLDER_INSTANCE;
}
}
+
التهيئة البطيئة +
الأداء العالي -
لا يمكن استخدامها لحقول الفصل غير الثابتة أي أسئلة/اقتراحات - اكتب في التعليقات! أنظر أيضا مقالاتي الأخرى:
GO TO FULL VERSION