Monopoli adalah iblis dan lajang dengan keadaan yang tidak bisa dibaca / bisa berubah adalah masalah 'nyata' ...
Setelah membaca Singletons adalah Pendusta Patologis seperti yang disarankan dalam jawaban jason, saya menemukan berita gembira kecil ini yang memberikan contoh terbaik yang disajikan tentang bagaimana singleton sering disalahgunakan.
Global buruk karena:
- Sebuah. Ini menyebabkan konflik namespace
- b. Itu memperlihatkan negara dengan cara yang tidak beralasan
Ketika datang ke Singletons
- Sebuah. Cara OO eksplisit memanggil mereka, mencegah konflik, jadi tunjuk a. bukan masalah
- b. Lajang tanpa negara (seperti pabrik) tidak menjadi masalah. Lajang dengan status lagi dapat jatuh dalam dua kategori, mereka yang tidak dapat diubah atau menulis sekali dan membaca banyak (konfigurasi file properti). Ini tidak buruk. Lajang yang dapat berubah, yang merupakan jenis pemegang referensi adalah yang Anda bicarakan.
Dalam pernyataan terakhir dia merujuk pada konsep blog tentang 'lajang adalah pembohong'.
Bagaimana ini berlaku untuk Monopoli?
Untuk memulai permainan monopoli, pertama:
- kami menetapkan aturan terlebih dahulu sehingga semua orang berada di halaman yang sama
- setiap orang diberi awal yang sama di awal permainan
- hanya satu set aturan yang disajikan untuk menghindari kebingungan
- aturan tidak diperbolehkan untuk berubah sepanjang game
Sekarang, bagi siapa saja yang belum benar - benar bermain monopoli, standar-standar ini paling ideal. Kekalahan dalam monopoli sulit ditelan karena, monopoli adalah tentang uang, jika Anda kalah, Anda harus dengan susah payah menonton sisa pemain yang menyelesaikan permainan, dan kekalahan biasanya cepat dan menghancurkan. Jadi, aturan biasanya diputar di beberapa titik untuk melayani kepentingan diri sendiri dari beberapa pemain dengan mengorbankan yang lain.
Jadi, Anda bermain monopoli dengan teman-teman Bob, Joe, dan Ed. Anda dengan cepat membangun kerajaan Anda dan mengonsumsi pangsa pasar pada tingkat eksponensial. Lawan Anda melemah dan Anda mulai mencium bau darah (kiasan). Teman Anda, Bob, memasukkan semua uangnya ke dalam kemacetan sebanyak mungkin properti bernilai rendah, tetapi miliknya tidak menerima pengembalian investasi yang tinggi seperti yang ia harapkan. Bob, sebagai pukulan sial, mendarat di Boardwalk Anda dan dikeluarkan dari permainan.
Sekarang permainan beralih dari dadu-bergulir ramah ke bisnis yang serius. Bob telah menjadi contoh kegagalan dan Joe dan Ed tidak ingin berakhir seperti 'pria itu'. Jadi, menjadi pemain terkemuka Anda, tiba-tiba, menjadi musuh. Joe dan Ed mulai mempraktikkan perdagangan di bawah meja, suntikan uang di belakang, pertukaran rumah yang undervalued dan umumnya apa pun untuk melemahkan Anda sebagai pemain sampai salah satu dari mereka naik ke atas.
Kemudian, alih-alih salah satu dari mereka menang, prosesnya dimulai dari awal. Tiba-tiba, seperangkat aturan yang terbatas menjadi target yang bergerak dan permainan berubah menjadi jenis interaksi sosial yang akan menjadi dasar dari setiap acara TV realitas berperingkat tinggi sejak Survivor. Mengapa, karena peraturan berubah dan tidak ada konsensus tentang bagaimana / mengapa / apa yang seharusnya mereka wakili, dan yang lebih penting, tidak ada satu orang pun yang mengambil keputusan. Setiap pemain dalam permainan, pada saat itu, membuat peraturannya sendiri dan kekacauan terjadi sampai dua pemain terlalu lelah untuk mempertahankan permainan dan perlahan-lahan menyerah.
Jadi, jika buku aturan untuk permainan secara akurat mewakili singleton, buku aturan monopoli akan menjadi contoh penyalahgunaan.
Bagaimana ini berlaku untuk pemrograman?
Selain dari semua masalah keamanan dan sinkronisasi utas yang jelas yang hadir dalam lajang yang bisa berubah ... Jika Anda memiliki satu set data, yang dapat dibaca / dimanipulasi oleh berbagai sumber secara bersamaan dan ada selama masa eksekusi aplikasi, mungkin ini saat yang tepat untuk mundur dan bertanya "apakah saya menggunakan tipe data struktur yang tepat di sini".
Secara pribadi, saya telah melihat seorang programmer menyalahgunakan singleton dengan menggunakannya sebagai semacam toko database cross-thread twisted dalam suatu aplikasi. Setelah bekerja pada kode secara langsung, saya dapat membuktikan bahwa itu lambat (karena semua kunci utas diperlukan untuk membuatnya aman) dan mimpi buruk untuk dikerjakan (karena sifat bug sinkronisasi yang tidak dapat diprediksi / berselang), dan hampir tidak mungkin diuji dalam kondisi 'produksi'. Tentu, sebuah sistem bisa dikembangkan menggunakan polling / pensinyalan untuk mengatasi beberapa masalah kinerja tetapi itu tidak akan menyelesaikan masalah dengan pengujian dan, mengapa repot ketika database 'nyata' sudah dapat mencapai fungsi yang sama dalam jauh lebih kuat / Cara terukur.
Singleton hanya merupakan opsi jika Anda membutuhkan apa yang disediakan oleh singleton. Sebuah instance read-only read-only dari objek. Aturan yang sama harus mengalir ke properti / anggota objek juga.