سؤال

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

B b = A.getB();

أو

B b = B.getInstance();

ما السبب وراء ذلك؟

لماذا لا يسمحون بإنشاء مثيل مباشرة ، كما في:

B b = new B();
هل كانت مفيدة؟

المحلول

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

هناك مليون سبب للرغبة في القيام بذلك.

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

نصائح أخرى

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

لن تكون الطبقات التجريدية قادرة على إنشاء مثيل لها أيضًا.

بعض حالات الاستخدام:

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

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

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

في ال getInstance() الحالة ، أراد المصمم أن يكون لديه مثيل واحد من كائن يمكن الوصول إليه خلال تطبيقه: إنه نمط المفرد وهو ما يعادل متغير عالمي.

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

  • المثال الأول يشبه نمط طريقة المصنع: تحديد واجهة لإنشاء كائن ، ولكن دع الفئات الفرعية تقرر الفئة التي يجب إنشاءها. تتيح طريقة المصنع لتأجيل الفصل الدراسي إلى الفئات الفرعية [GOF].

  • المثال الثاني هو نمط المفرد: مصنع يمكنه فقط إنشاء مثيل واحد للفصل.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top