الطرق الممكنة لجعل كائن غير قابل للتغيير
-
06-07-2019 - |
سؤال
أنا أبحث عن طريقة فعالة لبناء فئة غير قابلة للتغيير، تمامًا مثل فئة السلسلة في Java.
المحلول
- يجب أن تكون جميع الحقول
private
ويفضلfinal
- تأكد من أنه لا يمكن تجاوز الفصل - اجعل الفصل نهائيًا ، أو استخدم المصانع الثابتة والحفاظ
- يجب ملء الحقول من المنشئ/المصنع
- لا تقدم أي مستودعات للحقول
- احترس من المجموعات.يستخدم
Collections.unmodifiable*
.أيضًا، يجب أن تحتوي المجموعات على كائنات غير قابلة للتغيير فقط - يجب على جميع getters توفير كائنات غير قابلة للتغيير أو الاستخدام النسخ الدفاعي
- لا تقدم أي طرق تغير الحالة الداخلية للكائن.
توم هاوتين اشار الى ان final
يمكن أن تكون اختيارية. String
class
لديه ذاكرة التخزين المؤقت hash
var الذي يتم تعيينه فقط عند استدعاء دالة التجزئة.
نصائح أخرى
إذا قمت بملء جميع الحقول باستخدام المُنشئ وجعلت الحقول نهائية - فأنت في منتصف الطريق.
إذا كانت الحقول تستخدم أنواعًا مخصصة - فقد تحتاج إلى جعلها غير قابلة للتغيير أيضًا.
يجب أن تستخدم أي حقول عبارة عن مجموعات المجموعات غير القابلة للتعديل - لتكون في الجانب الآمن.
عليك أن تقلق بشأن الرسم البياني للكائن!
يجب أن تهتم أي أساليب على الكائن بالحقول غير النهائية.على سبيل المثالتقوم String.add بإنشاء ملف جديد خيط.إذا كنت بحاجة إلى تغيير حقل واحد - فقم بذلك عبر مُنشئ النسخ.
أخيرًا اجعل الكائن نهائيًا.