English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدليل، سنتعلم عبر الأمثلة نموذج تصميم singleton وكيفية تطبيقه في Java.
Singleton (النموذج الواحد) هو نموذج تصميم وليس خاصًا بـ Java. يضمن إنشاء فقط نموذج واحد من الفئة.
نموذج التصميم مثل مكتبة الكود الخاصة بنا، التي تحتوي على مجموعة متنوعة من تقنيات البرمجة التي تقاسمها برمجيات العالم.
هناك كيفية استخدام نموذج singleton في Java.
إنشاء مكون بناء خاص يقييد إنشاء المثلاً خارج الفئة.
إنشاء خاصية مرجعية خاصة للمثلاً الفريد.
إنشاء طريقة عامة ثابتة تسمح لنا بإنشاء وتواصل المثلاً التي أنشأناها. في الداخل، سنقوم بإنشاء شرط لمنع إنشاء أكثر من مثلاً.
هذه هي النسخة.
class SingletonExample { //مرجع لمجال العنصر الخاص private static SingletonExample singleObject; private SingletonExample() { //مكون بناء SingletonExample الفئة } public static SingletonExample getInstance() { //كتابة رمز يسمح لنا بإنشاء مثلاً واحد فقط //استخدام المثلاً حسب الحاجة } }
في المثال السابق،
private static SingletonExample singleObject - مرجع للمثلاً للفئة.
private SingletonExample() - مكون بناء خاص، يستخدم لتقييد إنشاء المثلاً خارج الفئة.
public static SingletonExample getInstance() - يعود هذا الطريقة بمرفوع للاعتبار لمثلاً الفريد من نوع SingletonExample. نظراً لأن هذه الطريقة هي ثابتة، يمكن الوصول إليها باستخدام اسم الفئة.
يمكن استخدام نموذج الفردية عند استخدام قاعدة البيانات. يمكن استخدامها لإنشاء خزانة الاتصالات لتحقيق الوصول إلى قاعدة البيانات، مع تکرار الاتصال نفسه لجميع العملاء. على سبيل المثال،
class Database { private static Database dbObject; private Database() { } public static Database getInstance() { //إنشاء المثلاً إذا لم يتم إنشاؤه بعد if(dbObject == null) { dbObject = new Database(); } //يعود بالعنصر التابع لمثلاً return dbObject; } public void getConnection() { System.out.println("现在已经连接到数据库。"); } } class Main { public static void main(String[] args) { Database db1; //ميزة الاستدلال على Database الفريد db1 = Database.getInstance(); db1.getConnection(); } }
عندما نحاول تشغيل البرنامج، سيكون الخروج كالتالي:
الآن قد تم الاتصال بقاعدة البيانات.
في المثال السابق،
لقد أنشأنا فئة Singleton Database.
dbObject هو مجال نوع فئة. سيقوم بتوجيه إلى عملاً فئة Database.
يمنع الكونструктор الخاص Database() من إنشاء عملاً في الخارج.
يستعيد الطريقة النوعية الثابتة getInstance() نموذج الفئة إلى الخارج.
في فئة Main، لدينا متغير نوع فئة db1. نحن نستخدم db1 لتشغيل getInstance() للحصول على عملاً Database الفريد.
يُمكن استخدام هذا النوع من getConnection() فقط للاستعلام عن Database.
بما أن Database يمكنها امتلاك فقط عملاً واحدًا، يمكن لكل عميل الوصول إلى قاعدة البيانات من خلال ارتباط واحد.
على الرغم من أن هناك قليل من الحالات (مثل السجلات) تجعل Singleton له معنى، حتى الاتصالات بالقاعدة البيانات عادة لا يجب أن تكون Singleton.
إذا كنت غير متأكد مما إذا كنت تستخدم Singleton أم لا، نوصي بك تجنب استخدام Singleton بشكل كامل.