JavaRush /مدونة جافا /Random-AR /نمط Singleton في كلماتك الخاصة
Roman_kh
مستوى
Харьков

نمط Singleton في كلماتك الخاصة

نشرت في المجموعة

مرحبًا بالجميع، جافا راش!

سأخبركم اليوم عن نمط التصميم Singleton(فردي). نمط المفردة في كلماتك الخاصة - 1الهدف: إنشاء فئة تحتوي على كائن واحد فقط. وهذا يعني أنه بغض النظر عن عدد مرات الوصول إليه، سيتم إرجاع نفس الكائن الذي تم إنشاؤه في المرة الأولى. هذا شيء مناسب وضروري في العديد من الأماكن، فليس من قبيل الصدفة أن يتم تنفيذه في الأطر. طلب:
  • على سبيل المثال، تحتاج إلى توصيل قاعدة بيانات بمشروع والفئة التي ستكون مسؤولة عن الاتصال به. يتم إنشاء الاتصال مرة واحدة وليس هناك حاجة إلى إنشائه مرارًا وتكرارًا
  • 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;
   }
}
+التهيئة البطيئة +الأداء العالي -لا يمكن استخدامها لحقول الفصل غير الثابتة أي أسئلة/اقتراحات - اكتب في التعليقات! أنظر أيضا مقالاتي الأخرى:
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION