كيفية جعل Singleton في جافا؟ أنواع التهيئة والمقارنة والنقاط التي يجب تذكرها
نشرت: 2020-10-07يتم تعريف الفئة المفردة في Java على أنها تلك الفئة التي تحتوي على كائن واحد فقط ، أي مثيل واحد فقط من الفئة. يساعد تقييد المثيل على واحد فقط لكل فئة في ترميز برامج معينة تتطلب مثيلاً واحدًا فقط من الفئة. يتم إعطاء المثيل الوحيد للفصل الفردي نقطة وصول عالمية.
تعد فئة Singleton أحد أنماط التصميم المهمة في برمجة Java. تساعد فصول Singleton في الحد من الموارد وتحسينها ؛ يتم استخدامه كثيرًا في اتصالات قواعد البيانات أو مآخذ التوصيل. توجد صيغ تنفيذية لفئة واحدة ، ويجب أن يعرفها المطور الجيد. دعونا نرى تنفيذ الفصل الفردي في جافا.
تعلم برامج مهندس البرمجيات عبر الإنترنت من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.
قراءة: شرح معمارية جافا ومكوناتها
جدول المحتويات
التهيئة
تتم تهيئة المفرد في Java من خلال مُنشئ خاص. تساعد المُنشئات الخاصة في الفصول الأخرى التي لا تكون قادرة على إنشاء نفس مثيل لفصلك الفردي. هناك خمسة أنواع من تهيئة فئة واحدة في Java مدرجة أدناه:
1. التهيئة حريصة
يتم إنشاء طريقة عامة تُعرف باسم getInstance (). ستساعد هذه الطريقة في توفير نقطة دخول واحدة فقط لإنشاء مثيل للفئة ، وبالتالي جعلها فئة فردية. يتم إنشاء مثيل الفئة في التهيئة الحثيثة في وقت تحميل الفصل.

يقوم هذا النوع من تقنية التهيئة بإنشاء مثيل للفئة تلقائيًا ، حتى إذا كان المستخدم لا يستخدمها. قد يتسبب هذا في مخاوف الذاكرة وطول غير ضروري في التعليمات البرمجية. لمواجهة مشكلة تسرب الذاكرة ، دعونا نرى نوعًا آخر من تقنيات التهيئة لفئة فردية في Java.
2. التهيئة الكسولة
تتم تهيئة مثيل الفئة في الطريقة getInstance () نفسها في التهيئة البطيئة. ستتحقق الطريقة في التهيئة البطيئة مما إذا كان مثيل الفئة قد تم إنشاؤه أم لا ، وإذا لم يتم إنشاؤه ، فإنه يقوم فقط بإنشاء مثيل ، وبالتالي حل مشكلة تسرب الذاكرة.
الطريقة التي ينشئها المرء في التهيئة البطيئة ثابتة ولها كائن من النوع المرتجع. لن يتم إنشاء مثيل مفرد في التهيئة البطيئة حتى يتم استدعاء طريقة getInstance () لأول مرة.
3. التهيئة الكسولة بطريقة القفل المزدوج
تستخدم هذه الطريقة في وقت أكثر من خيط واحد. إذا كنا نستخدم خيطين في البرنامج ، ويمكن الوصول إلى كليهما عبر عبارة "if" في البداية عندما يكون المثيل فارغًا ، فسيؤدي ذلك إلى حدوث حالة تعارض وقد تجد أخطاء.
يتم حل هذه المشكلة من خلال طريقة القفل المزدوج حيث يتم إدخال مؤشر ترابط واحد فقط في المرة الواحدة في الكتلة المتزامنة لتهيئة المثيل بينما يتم حظر مؤشر الترابط الآخر. عندما يخرج الخيط الأول من الكتلة المتزامنة ، فإن الخيط الثاني فقط يدخل وينشئ حالة أخرى. بشكل افتراضي ، لا يتحقق مؤشر الترابط الثاني مما إذا كان المثيل غير فارغ أم لا.
4. طريقة التحميل الكسول
يتم إنشاء فئة داخلية متداخلة في هذه الطريقة وتعمل على مبادئ JLS (مواصفات لغة Java). لن يكون هناك أعضاء بيانات ثابتة في الفصل ؛ لن يقوم JVM بتكوين مثيل للفئة. سيتم إنشاء المثيل عند الطلب فقط عندما نستدعي طريقة getInstance ().
لا تحتاج إلى مزامنة طريقة التهيئة والتحميل لأن هذه الطريقة تساعد في المزامنة التلقائية لجميع استدعاءات الحصول على مثيل ().

5. طريقة تعداد
لا يزال من الممكن إنشاء مثيلات متعددة لفئة فردية عن طريق التسلسل والانعكاس في الطرق المذكورة أعلاه. في حالة عمل فئة فردية صارمة ، يمكن استخدام هذه الطريقة. يتم استخدام حقول Enums في هذه الطريقة وهي ثابتة وتعمل في وقت الترجمة فقط.
التعداد هو مثيل لنوع Enum وسيتم إنشاؤه فقط عند استدعاء / استدعاء نوع Enum لأول مرة في الكود. هذه الطريقة تقيد استنساخ المثال وتخلق فئة فردية مثالية.
اقرأ أيضًا: أفضل 12 برنامجًا للنماذج في Java يجب عليك التحقق منها اليوم
التسلسل والانعكاس
يساعد التسلسل في نقل كائنات Java من JVM (Java Virtual Machine) إلى آخر. التسلسل هو إحدى الطرق المستخدمة لإنشاء مثيلات متعددة للفئة. التسلسل يحول الكائن إلى دفق بايت ، ثم يتم النقل.
يساعد دفق البايت في إعادة إنشاء الكائن في بعض ملفات JVM الأخرى باستخدام عملية إلغاء التسلسل. يساعد أنظمة متعددة على التواصل ومشاركة الأشياء فيما بينها. يساعد في تزامن JVM المتقاطع حيث ستعمل الكائنات في JVMs مختلفة.
الانعكاس هو أيضًا طريقة لاستنساخ الكائنات في Java. الانعكاس هو واجهة برمجة تطبيقات تساعدنا في معرفة فئة أي كائن غير معروف وطرق تلك الفئة المعينة والتي يمكن الوصول إليها عبر الكائن. يستخدم المبرمجون الانعكاس على نطاق واسع لتعديل سلوك الفئات والطرق في وقت التشغيل.
الأوامر الرئيسية الثلاثة المستخدمة في الانعكاس هي getClass () لمعرفة الفئة التي ينتمي إليها الكائن ، و getConstructors () للحصول على المنشئين العامين لفئة الكائن ، و getMethods () لمعرفة الطرق العامة للفصل تحت الملاحظة.
فئة عادية مقابل فئة سينجلتون
تستخدم الفئة القياسية في Java المُنشئين لتهيئة نفسها ، بينما نستخدم طريقة getInstance () لتهيئة فئة فردية. يمكننا أيضًا استخدام نفس اسم الفئة والطريقة. نقوم بإنشاء كائن أولاً للفئات العادية ، ثم نستخدم طرقه وخصائصه.
في المقابل ، في فئة واحدة ، نقوم بإنشاء مثيل باستخدام الخاصية الثابتة للفئة ، وفي أي نقطة خلال الكود ، سترجع هذه الفئة المعينة مثيلًا واحدًا فقط.
إلى جانب العديد من مزايا الفصول الفردية ، هناك بعض الثغرات أيضًا مثل طرق اختبار وحدة العبث للفئات الفردية إذا كانت الكائنات والأساليب مقترنة بإحكام. سيكون عليك تخصيص فصل وظيفي بالكامل لفرد واحد في هذه الحالة.
يتم أيضًا إنشاء التبعيات المخفية بواسطة فئة واحدة في بعض الأحيان ، حيث يتم تمرير مرجع الفئة المفردة إلى طرق أخرى وهي غير شفافة تمامًا مما يجعل من الصعب على المبرمجين / المطورين تتبع الأساليب والفئات. يجب على المرء أن يضع هذه العيوب في الاعتبار قبل إنشاء نمط مفرد ويجب أن يحاول تقليله.
نقاط لجعل فصل دراسي فردي مثالي
1. النقاط التي يجب التركيز عليها لعمل فصل فردي مثالي هي كما يلي:
2. إذا كنت تقوم بإنشاء سلاسل رسائل متعددة في فصل فردي ، فتأكد من أن جميع سلاسل الرسائل يجب ألا تقوم بتهيئة الفصل الفردي في نفس الوقت. يجب على المرء أن يحاول إنشاء فصول فردية آمنة.

3. جعل انعكاس الفصل الفردي الخاص بك دليلًا ، عن طريق تغيير رؤية المُنشئ للجمهور في وقت التشغيل والتأكد من وجود مثيل واحد فقط لأي فئة فردية معينة.
4. إذا كان هناك العديد من الخيوط ، يمكنك استخدام معدل متغير يمنع الخيط من النظر إلى الحالة المبدئية للخيوط الأخرى. يعمل المعدل المتغير على العلاقة التي تحدث قبل حدوث الكتابة التي تحدث فيها الكتابة في سلسلة رسائل قبل أن يتمكن أي مؤشر ترابط آخر من قراءته.
يجب أن تقرأ: أفكار مشاريع جافا مثيرة للاهتمام للمبتدئين
خاتمة
تُستخدم فئات Singleton لإجراء اتصالات مخصصة بقاعدة البيانات أو أي برنامج تريد التحكم في طرق ومثيلات الفصل الدراسي.
إذا كنت ترغب في تحسين مهارات جافا الخاصة بك ، فأنت بحاجة إلى الحصول على يديك في مشاريع جافا هذه. إذا كنت مهتمًا بمعرفة المزيد حول Java ، تطوير المكدس الكامل ، تحقق من برنامج upGrad & IIIT-B التنفيذي PG في تطوير البرمجيات - التخصص في تطوير المكدس الكامل المصمم للمهنيين العاملين ويقدم أكثر من 500 ساعة من التدريب الصارم ، 9 + المشاريع ، والتعيينات ، وحالة خريجي IIIT-B ، ومشاريع التخرج العملية العملية والمساعدة في العمل مع الشركات الكبرى.