Sebagai latihan belajar (saya tidak di sekolah - hanya seorang lelaki tua yang mencoba mempelajari sesuatu yang baru), saya mencoba untuk menulis simulasi gerbang logika yang menggabungkan penundaan propagasi. Pengguna juga harus dapat mengelompokkan gerbang bersama untuk membuat objek tingkat yang lebih tinggi.
Saya ingin menerapkan pola desain untuk masalah saya, tetapi saya mengalami kesulitan.
Saya membaca Head First Design Patterns , dan saya melihat bahwa pola Command adalah cara yang baik untuk mensimulasikan pulsa listrik melalui rangkaian dengan penundaan. Saya juga melihat bahwa pola Komposit adalah cara yang baik untuk mensimulasikan unit bersarang. Aku hanya tidak tahu bagaimana mencampur keduanya.
Dengan kata lain, ketika saya melewati gerbang saya, saya melihat bahwa gerbang 'x' akan menyala. Ini memiliki penundaan 15 nanosecond, jadi saya membuat perintah dengan cap waktu 15 ns dari waktu permainan saat ini. Di mana pengirimnya? Dalam contoh restoran, dengan perintah menjadi 'Pesanan', pelayan dan juru masak masing-masing mengirimkan perintah dan memiliki opsi untuk memperkenalkan penundaan. Jika saya memiliki gerbang 'komposit', apakah ia juga memiliki operator sendiri? Apakah saya perlu menggunakan Singleton untuk mengelola antrian?
Saya membaca apa yang bisa saya temukan, tetapi saya masih membutuhkan dorongan ke arah yang benar:
sumber
Jawaban:
Anda mungkin ingin melihat contoh dari Pemrograman di Scala , karena mereka memiliki simulator yang melakukan apa yang Anda coba lakukan di Jawa:
http://www.cs.helsinki.fi/u/wikla/OTS/Sisalto/examples/html/ch30.html#sec6
Dengan melihat pendekatan mereka, Anda dapat menemukan cara mengubah program Anda untuk mendapatkan perilaku yang Anda inginkan.
Anda menyebutkan bahwa Anda tidak dapat menambahkannya dengan mudah, jadi mengapa tidak menjelaskan apa pendekatan Anda, dan apa kesulitan yang Anda temui, sehingga orang dapat memberi Anda beberapa saran yang mungkin tidak Anda pertimbangkan.
Seperti yang disebutkan, pola desain adalah cara untuk berbicara tentang apa yang kode Anda lakukan, sebagai tulisan cepat, tetapi gagasan untuk mencoba memaksakan pola desain sepertinya adalah ide yang buruk.
Pada dasarnya penundaan propagasi seharusnya tidak sulit.
Anda dapat memiliki kelas dasar itu
Gate
, dan dia menunda.Semua gerbang meluas dari ini, dan mengatur penundaan yang sebenarnya.
Sekarang, ketika Anda mengikuti sinyal, ketika di gerbang, utas itu mungkin tertunda untuk penundaan simulasi, tetapi ini juga berarti Anda perlu memetakan waktu nyata ke waktu simulasi Anda, karena simulator Anda akan lebih lambat daripada sistem nyata. akan menjadi.
Jika Anda menemukan bahwa Anda memiliki terlalu banyak utas, maka cukup masukkan ke dalam daftar yang disortir, dengan yang berikutnya di atas, dan ketika Anda berhenti, cukup taruh waktu penundaan dilakukan dan pada setiap loop simulator akan memilih yang sudah siap , lakukan tindakan selanjutnya, dan kemudian penundaan berikutnya terjadi.
Ini akan mirip dengan loop game.
sumber
Maka Anda tidak menggunakan pola perintah.
Ya tuhan tidak. Seluruh titik dari pola komposit adalah bahwa Anda dapat memasok objek komposit ke lokasi yang hanya mengharapkan satu objek. Ini memungkinkan Anda untuk menyusun perilaku dengan cara yang waras.
Tidak. Apakah Anda hanya memiliki satu juru masak dan satu pelayan di seluruh dunia? Apakah mereka hanya memiliki satu dapur?
Mencampur perintah dan pola komposit cukup mudah. Anda memiliki beberapa antarmuka yang mewakili perintah. Setiap perintah konkret dapat mengesampingkan (atau memenuhinya dalam bahasa non-pewarisan) antarmuka yang menyediakan beberapa perilaku. Penundaan Anda adalah salah satu perilaku sederhana tersebut.
Pola komposit menyediakan dua (atau lebih) objek / perilaku di balik satu antarmuka. Penggunaan paling sederhana untuk contoh ini adalah perintah gabungan yang mengambil dua perintah lain dan kemudian ketika disuruh mengeksekusi, memicu dua perintah yang tersimpan. Dengan cara ini Anda dapat mengambil perintah 'penundaan' Anda yang terisolasi dan perintah lain yang sewenang-wenang untuk membuat perintah yang tertunda.
sumber