النمط المفرد هو أحد أبسط أنماط التصميم. الفئة التي تستخدم نمط التصميم الفردي لها مثيل واحد يديره من تلقاء نفسه. تمنع هذه الفئة أي فئة أخرى من إنشاء مثيل لها.

توفر الفئة المنفردة أيضًا نقطة وصول عالمية واحدة للمثيل الذي تنشئه. لذا ، فإن أي فئة تريد مثيلًا لفئة فردية ، تحتاج إلى الوصول إليها من خلال نقطة وصولها الفردية.

يجعل دعم Java الممتاز للبرمجة الموجهة للكائنات من السهل استخدام نمط التصميم الفردي.

تنفيذ نمط Singleton باستخدام Java

هناك العديد من الطرق لتنفيذ النمط الفردي في Java ؛ النهج المتلهف والكسول من الاختلافات الشائعة. كل من هذه الأساليب لها مزاياها وعيوبها. لذلك ، يجب أن تعتمد الطريقة التي تختار استخدامها على كيفية عمل التطبيق الخاص بك.

النهج الحريص

يعني تنفيذ النمط الفردي مع النهج الحثيث أن الفصل ينشئ مثيلًا جديدًا لنفسه عندما يتم تحميله.

عامفصلحريصة{
خاصثابتة مثيل EagerSingleton = جديد EagerSingleton () ،

خاصحريصة(){}

عامثابتة حريصة getInstance(){
يعود مثال؛
}
}

ال حريصةفئة جافا يُنشئ مثيلًا جديدًا لنفسه أثناء تحميله. يقوم بتعيين هذا المثيل إلى ثابت خاص المتغيرات الخاصة، والتي يمكن الوصول إليها فقط داخل الفصل الفردي. النقطة الوحيدة للوصول الخارجي إلى متغير المثيل هي من خلال

instagram viewer
getInstance () طريقة. تقوم هذه الطريقة بإرجاع مثيل الفئة الذي تم إنشاؤه مسبقًا.

هذا النهج رائع لأنه يمنع تعدد الخيوط المشكلة ، والتي تعد واحدة من أكبر التحديات التي يواجهها النمط الفردي. إنه يحل مشكلة تعدد مؤشرات الترابط عن طريق إنشاء مثيل جديد لنفسه قبل أن يتمكن أي مؤشر ترابط جديد من الوصول إلى متغير المثيل الخاص به. هذا يضمن أن كل مؤشر ترابط سيكون له حق الوصول إلى نفس المثيل فقط.

ومع ذلك ، فإن الطريقة الحثيثة تكون عملية فقط إذا كان التطبيق الخاص بك سيستخدم مثيلًا للفئة المفردة عند بدء تشغيله. خلاف ذلك ، ستنشئ كائنًا قبل أن يحتاجه التطبيق الخاص بك ، باستخدام موارد غير ضرورية.

النهج الكسول

النهج الكسول هو الحل لمشكلة النهج المتلهف. يسمح لك بإنشاء مثيل جديد لفئة فردية فقط عندما يحتاجها برنامجك.

عامفصلكسول سينجلتون{
خاصمتقلبثابتة مثيل LazySingleton ؛

خاصكسول سينجلتون(){}

عامثابتة كسول سينجلتون getInstance(){
لو (المثال == باطل) {
متزامن (كسول سينجلتون.فصل) {
لو (المثال == باطل) {
المثال = جديد LazySingleton () ؛
}
}
}

يعود مثال؛
}
}

يعمل النهج البطيء على حل مشكلة تعدد مؤشرات الترابط باستخدام امتداد متزامن كلمة رئيسية. هذا يمنع اثنين من مؤشرات الترابط من الوصول إلى متغير المثيل في نفس الوقت. المزامنة باهظة الثمن ، ومع ذلك ، يستخدمها التطبيق مرة واحدة فقط ، عندما يستدعي getInstance () لأول مرة.

متى تستخدم نمط Singleton

يعد نمط Singleton مفيدًا في العديد من السيناريوهات ، لإنشاء مربعات حوار أو التعامل مع إعدادات التسجيل أو إدارة تجمعات مؤشرات الترابط.

استخدام آخر شائع للنمط الفردي هو إنشاء فئة مركزية تدير اتصالات قاعدة البيانات.