JavaRush /وبلاگ جاوا /Random-FA /الگوی تک تن به قول خودتان
Roman_kh
مرحله
Харьков

الگوی تک تن به قول خودتان

در گروه منتشر شد

سلام به همه، javaRush!

امروز در مورد الگوی طراحی Singleton(تک) به شما خواهم گفت. الگوی تک تن به قول خودتان - 1هدف: ایجاد کلاسی که فقط یک شیء داشته باشد. این بدان معنی است که مهم نیست که چند بار به آن دسترسی داشته باشید، همان شیئی که بار اول ایجاد شده بود، برگردانده می شود. این یک چیز راحت و در بسیاری از جاها ضروری است، بیهوده نیست که در چارچوب ها پیاده سازی می شود. کاربرد:
  • به عنوان مثال، شما باید یک پایگاه داده را به یک پروژه و کلاسی که مسئولیت اتصال به آن را بر عهده دارد، متصل کنید. اتصال یک بار ایجاد می شود و نیازی به ایجاد دوباره و دوباره آن نیست
  • Application settings- کلاسی که مسئول تنظیمات اتصالی است که برای برنامه مورد نیاز است: میزبان پایگاه داده و پورت و غیره. آنها یک بار ایجاد می شوند و در طول عملیات برنامه مورد استفاده قرار می گیرند.
  • نمونه های زیادی وجود دارد که من ذکر نکرده ام، بنابراین گزینه های خود را در نظرات بنویسید! =)
بعد از این مقدمه، همانطور که من متوجه شدم، می توانید نمونه ای از این کلاس را نشان دهید: (اگرچه مطمئن هستم که هر یک از ما می توانیم یک پیاده سازی از آن را ارائه دهیم) در اینجا ساده ترین مثال است، زمانی که سازنده را خصوصی می کنیم، i.e. شما نمی توانید یک شی را به صراحت ایجاد کنید. و یک روش ثابت وجود دارد 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;
  }
}
در پایان طبق معمول می خواهم بگویم که اگر جور دیگری فکر می کنید یا اشتباهی در من پیدا می کنید در نظرات بنویسید! ما همه چیز را با لذت بحث خواهیم کرد :) اگر مقاله را دوست داشتید، "+" را بنویسید و من آن را می دانم. این برای من مهم است :) PS من پیاده سازی های بیشتری را اضافه می کنم: طبق گفته Joshua Bloch ، این بهترین راه برای پیاده سازی قالب است.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