الطرق الممكنة لجعل كائن غير قابل للتغيير

StackOverflow https://stackoverflow.com/questions/1017140

  •  06-07-2019
  •  | 
  •  

سؤال

أنا أبحث عن طريقة فعالة لبناء فئة غير قابلة للتغيير، تمامًا مثل فئة السلسلة في Java.

هل كانت مفيدة؟

المحلول

  1. يجب أن تكون جميع الحقولprivate ويفضل final
  2. تأكد من أنه لا يمكن تجاوز الفصل - اجعل الفصل نهائيًا ، أو استخدم المصانع الثابتة والحفاظ
  3. يجب ملء الحقول من المنشئ/المصنع
  4. لا تقدم أي مستودعات للحقول
  5. احترس من المجموعات.يستخدمCollections.unmodifiable*.أيضًا، يجب أن تحتوي المجموعات على كائنات غير قابلة للتغيير فقط
  6. يجب على جميع getters توفير كائنات غير قابلة للتغيير أو الاستخدام النسخ الدفاعي
  7. لا تقدم أي طرق تغير الحالة الداخلية للكائن.

توم هاوتين اشار الى ان final يمكن أن تكون اختيارية. String class لديه ذاكرة التخزين المؤقت hash var الذي يتم تعيينه فقط عند استدعاء دالة التجزئة.

نصائح أخرى

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

إذا كانت الحقول تستخدم أنواعًا مخصصة - فقد تحتاج إلى جعلها غير قابلة للتغيير أيضًا.

يجب أن تستخدم أي حقول عبارة عن مجموعات المجموعات غير القابلة للتعديل - لتكون في الجانب الآمن.

عليك أن تقلق بشأن الرسم البياني للكائن!

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

أخيرًا اجعل الكائن نهائيًا.

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

لمزيد من المعلومات، انظر ويكيبيديا

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