Pertanyaan Perbedaan antara kelas statis dan pola tunggal?


Perbedaan nyata apa (yakni praktis) antara kelas statis dan pola tunggal?

Keduanya dapat dipanggil tanpa instantiasi, keduanya hanya menyediakan satu "Instance" dan keduanya tidak aman. Apakah ada perbedaan lain?


1489
2018-02-06 08:13


asal


Jawaban:


Apa yang membuat Anda mengatakan bahwa metode tunggal atau statis tidak aman? Biasanya keduanya harus diimplementasikan menjadi thread-safe.

Perbedaan besar antara metode tunggal dan sekumpulan metode statis adalah bahwa lajang dapat mengimplementasikan antarmuka (atau berasal dari kelas dasar yang berguna, meskipun itu kurang umum, dalam pengalaman saya), sehingga Anda dapat melewatkan orang tunggal seolah-olah itu "hanya lain "implementasi.


1042
2018-02-06 08:17



Jawaban yang benar adalah oleh Jon Skeet, di forum lain di sini.

Singleton memungkinkan akses ke single   membuat instance - instance itu (atau   lebih tepatnya, referensi ke contoh itu)   dapat dilewatkan sebagai parameter ke lainnya   metode, dan diperlakukan sebagai normal   obyek.

Kelas statis hanya memungkinkan statis   metode.


403
2018-02-06 08:21



  1. Benda Singleton disimpan di Tumpukan, tetapi benda statis disimpan di dalamnya tumpukan.
  2. Kita dapat klon (jika perancang tidak membolehkannya) objek tunggal, tetapi kita tidak dapat mengkloning objek kelas statis .
  3. Kelas Singleton mengikuti OOP (prinsip berorientasi objek), kelas statis tidak.
  4. Kita bisa mengimplementasikan interface dengan kelas Singleton, tetapi metode statis kelas (atau misalnya C # static class) tidak bisa.

324
2017-09-11 10:22



Pola Singleton memiliki beberapa keunggulan dibandingkan kelas statis. Pertama, seorang siswa dapat memperpanjang kelas dan mengimplementasikan antarmuka, sementara kelas statis tidak dapat (dapat memperpanjang kelas, tetapi tidak mewarisi anggota instan mereka). Singleton dapat diinisialisasi secara malas atau asynchronous sementara kelas statis umumnya diinisialisasi ketika pertama dimuat, yang mengarah ke masalah kelas loader potensial. Namun, keuntungan yang paling penting, adalah bahwa lajang dapat ditangani secara polimorfik tanpa memaksa penggunanya untuk menganggap bahwa hanya ada satu contoh.


122
2018-02-06 08:30



static kelas tidak harus melakukan apa-apa perlu negara, itu berguna untuk meletakkan banyak fungsi bersama-sama yaitu Math (atau Utils dalam proyek). Jadi nama kelas hanya memberi kita petunjuk di mana kita dapat menemukan fungsi dan tidak ada yang lebih.

Singleton adalah pola favorit saya dan menggunakannya untuk mengelola sesuatu pada satu titik. Ini lebih fleksibel daripada static kelas dan dapat mempertahankan negara. Ini dapat mengimplementasikan antarmuka, mewarisi dari kelas lain dan memungkinkan pewarisan.

Aturan saya untuk memilih di antara static dan singleton:

Jika ada banyak fungsi yang harus disatukan, maka static adalah pilihannya. Hal lain yang membutuhkan akses tunggal ke beberapa sumber daya, dapat diterapkan singleton.


56
2017-12-30 20:55



Kelas Statis: -

  1. Anda tidak dapat membuat instance dari kelas statis.

  2. Dimuat secara otomatis oleh .NET Framework runtime bahasa umum (CLR) ketika program atau ruangnama yang berisi kelas dimuat.

  3. Kelas Statis tidak dapat memiliki konstruktor.

  4. Kita tidak bisa melewatkan kelas statis ke metode.

  5. Kita tidak dapat mewarisi kelas Statis ke kelas Statis lainnya di C #.

  6. Kelas yang memiliki semua metode statis.

  7. Performa yang lebih baik (metode statis terikat pada waktu kompilasi)

Singleton: -

  1. Anda dapat membuat satu contoh objek dan menggunakannya kembali.

  2. Instance Singleton dibuat untuk pertama kalinya ketika pengguna meminta.

  3. Kelas Singleton dapat memiliki konstruktor.

  4. Anda dapat membuat objek kelas tunggal dan meneruskannya ke metode.

  5. Kelas Singleton tidak mengatakan adanya pembatasan Warisan.

  6. Kita dapat membuang objek dari kelas tunggal tetapi bukan kelas statis.

  7. Metode dapat ditimpa.

  8. Dapat bermalas-malasan saat dibutuhkan (kelas statis selalu dimuat).

  9. Kami dapat mengimplementasikan antarmuka (kelas statis tidak dapat mengimplementasikan antarmuka).


49
2018-06-01 11:42



Kelas statis adalah kelas yang hanya memiliki metode statis, yang kata yang lebih baik adalah "fungsi". Gaya desain yang diwujudkan dalam kelas statis murni prosedural.

Singleton, di sisi lain, adalah pola khusus untuk desain OO. Ini adalah contoh dari suatu objek (dengan semua kemungkinan yang melekat dalam hal itu, seperti polimorfisme), dengan prosedur pembuatan yang memastikan bahwa hanya ada satu contoh peran khusus itu selama seluruh masa hidupnya.


47
2018-02-06 08:35