Anda tentu harus lebih suka membuat objek baru di sebagian besar kasus. Masalah dengan menetapkan kembali semua properti:
- Membutuhkan setter publik pada semua properti, yang secara drastis membatasi tingkat enkapsulasi yang dapat Anda berikan
- Mengetahui apakah Anda memiliki penggunaan tambahan untuk instance lama berarti Anda harus tahu di mana-mana bahwa instance lama sedang digunakan. Jadi jika kelas
A
dan kelas B
sama-sama lulus instance dari kelas C
maka mereka harus tahu apakah mereka akan pernah lulus contoh yang sama, dan jika demikian apakah yang lain masih menggunakannya. Ini erat pasangan kelas yang sebaliknya tidak punya alasan untuk menjadi.
- Mengarah pada kode berulang - seperti yang ditunjukkan gbjbaanb, jika Anda menambahkan parameter ke konstruktor, di mana pun yang memanggil konstruktor akan gagal dikompilasi, tidak ada bahaya kehilangan tempat. Jika Anda hanya menambahkan properti publik, Anda harus memastikan untuk menemukan dan memperbarui secara manual setiap tempat di mana objek "diatur ulang".
- Meningkatkan kompleksitas. Bayangkan Anda membuat dan menggunakan instance kelas dalam satu lingkaran. Jika Anda menggunakan metode Anda, maka Anda sekarang harus melakukan inisialisasi terpisah saat pertama kali melalui loop, atau sebelum loop dimulai. Either way adalah kode tambahan yang harus Anda tulis untuk mendukung dua cara inisialisasi ini.
- Berarti kelas Anda tidak dapat melindungi diri dari keadaan tidak valid. Bayangkan Anda menulis sebuah
Fraction
kelas dengan pembilang dan penyebut, dan ingin memastikan bahwa itu selalu dikurangi (yaitu gcd pembilang dan penyebutnya adalah 1). Ini tidak mungkin dilakukan dengan baik jika Anda ingin orang-orang mengatur pembilang dan penyebutnya secara publik, karena mereka dapat bertransisi melalui negara yang tidak valid untuk berpindah dari satu keadaan yang valid ke yang lain. Misalnya 1/2 (valid) -> 2/2 (tidak valid) -> 2/3 (valid).
- Sama sekali tidak idiomatis untuk bahasa tempat Anda bekerja, meningkatkan gesekan kognitif bagi siapa pun yang memelihara kode.
Ini semua adalah masalah yang cukup signifikan. Dan apa yang Anda dapatkan sebagai imbalan atas kerja ekstra yang Anda buat adalah ... tidak ada. Membuat instance objek adalah, secara umum, sangat murah, sehingga manfaat kinerja hampir selalu dapat diabaikan.
Seperti jawaban lain yang disebutkan, satu-satunya kinerja waktu yang mungkin menjadi perhatian yang relevan adalah jika kelas Anda mengerjakan pekerjaan konstruksi yang sangat mahal. Tetapi bahkan dalam kasus itu, agar teknik ini berfungsi, Anda harus dapat memisahkan bagian yang mahal dari properti yang Anda atur ulang, sehingga Anda dapat menggunakan pola bobot terbang atau yang serupa.
Sebagai catatan tambahan, beberapa masalah di atas dapat dikurangi sedikit dengan tidak menggunakan setter dan sebaliknya memiliki public Reset
metode di kelas Anda yang mengambil parameter yang sama dengan konstruktor. Jika karena alasan tertentu Anda memang ingin turun rute reset ini, itu mungkin cara yang lebih baik untuk melakukannya.
Namun, kompleksitas tambahan dan pengulangan yang menambahkan, bersama dengan poin-poin di atas yang tidak dibahas, masih merupakan argumen yang sangat persuasif untuk tidak melakukannya, terutama ketika ditimbang dengan manfaat yang tidak ada.