design pattern, java, جاوا, دیزاین پترن

singletone در جاوا (Design Pattern in Java)

singletone در جاوا

در این قسمت تیم کدگیت را با آموزش singletone در جاوا همراهی کنید. پیش نیاز این آموزش شامل موارد زیر است:

  1. آشنایی با شی گرایی
  2. آشنایی با static
  3. آشنایی با متد
  4. آشنایی با Constructor
  5. آشنایی با if
  6. دیزاین پترن

Creational Design Pattern

یکی از زیر شاخه های دیزاین پترن Creational Design Pattern هست. این پترن راهی برای ساخت اشیاست. وقتی از این الگو استفاده میشود که ما میخواهیم در برنامه خود از یک کلاس یک شی را بسازیم. اما برای بسیاری ممکن است ساخت شی بسیار ساده باشد و فقط با new کردن ما یک شی را بسازیم. اما hard code راه حل خوبی نیست!! زیرا ما بعضی اوقات در کد خود هویت یک کلاس را عوض کنیم و در این گونه اوقات ما باید از Creational Design pattern استفاده میکنیم.

Singletone در جاوا

یکی از ساده ترین الگوها، Singletone در جاوا است. این پترن از شاخه های Creational Design Pattern است و برای ساخت اشیا از آن استفاده میشود. اگر ما بخواهیم از یک کلاس فقط و فقط یک شی ساخته شود از این پترن استفاده میکنیم. حال ممکن است بپرسید ما کی از این الگو استفاده کنیم یا ما با چنین الگویی در کد خود روبرو میشویم؟!! در جواب باید گفت این الگو در موارد زیر استفاده میشود:

  1. اتصال به دیتابیس
  2. Caching
  3. Threadpool
  4. Logging

Singletone را میتوان به دو روش early Instantiation  و Lazy Loading پیاده سازی کرد. با هم پیاده سازی این دو را میبینیم.

مثال Singletone در جاوا

ما یک کلاس داریم به نام A که این کلاس یک فیلد از جنس خودش دارد به نام instance. ما یک Constructor هم ساختیم که آن را Private تعریف کردیم(چرا؟!!!). کد کلاس A به صورت زیر است:

public class A {

     private static A instance = new A();

     private A() {

     }

     public static A getinstance(){
          return instance ;
     }
}

کلاس A از پترن Singletone استفاده کرده است. ما یک متد به نام getinstance نوشتیم که شی که از جنس A ساخته شده را بر میگرداند. ما دیگر نمیتوانیم شی دیگری از A بسازیم و این دقیقا کاری است که Singletone انجام میدهد. دقت کنید فیلد instance را ما مستقیم مقدار دهی کردیم. این نوع پیاده سازی را early Instantiation  میگویند.

برای پیاده سازی Lazy Loading کد زیر را باید زد:

public class A {

     private static A instance;

     private A() {

     }

     public static A getinstance(){
          if (instance == null) {
              instance = new A();
          }
          return instance ;
     }
}

همانطور که میبینید ما instance را مقدار دهی نکردیم و درون متد وقتی که نیاز به آن داشتیم یک بار آن را مقدار دهی کردیم. بار های بعدی دیگر شی ساخته نمیشود. و دوباره از الگوی singletone استفاده کردیم.

تست singletone در جاوا

برای تست کدهای بالا، کد Main زیر را بزنید:

     public static void main(String[] args) {
          A instance1 = A.getinstance();
          System.out.println(instance1);

          A instance2 = A.getinstance();
          System.out.println(instance2);

     }

خروجی کد بالا آدرس شی ساخته شده از کلاس A هست. ما دو شی ساختیم و آدرس هر دو را چاپ کردیم. آدرس هر دو یکی است و این بدین معنی است که از کلاس A فقط یک شی میتوان ساخت!!! خروجی کد بالا به صورت زیر است:

A@2a139a55
A@2a139a55

نوشته های مشابه

2 دیدگاه در “singletone در جاوا (Design Pattern in Java)

  1. محمد گفت:

    مثل همیشه عالی هستید!
    خدا قوت…

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *