В управляемых событиями программах, которые я делал в прошлом, вы хотите, чтобы каждый класс, который собирается что-то делать, и генерирует события, имеет внутренний список слушателей, которые могут регистрироваться/регистрироваться в этом классе. Подумайте об этом как о том, кто подписывается на ваши твиты в Интернете. Вы отвечаете на некоторые типы стимулов и отправляете уведомления всем, кто подписался/зарегистрирован в вашем канале. Те слушатели, в свою очередь, могут принять меры и отправить уведомления своим слушателям и т. Д.
Простая реализация должна заключаться в том, чтобы интерфейс TweetListener и классы подписки реализовали этот интерфейс. Вы, как the TweetProducer, должны иметь набор методов регистрации/отмены регистрации, поддерживаемых внутренним списком всех экземпляров TweetListener, которые хотят получать уведомления при отправке «события». Когда вы будете готовы отправить чириканье, вы можете пройти через защитную копию этого списка и для каждого объекта там, вы должны вызвать метод, определенный в вашем интерфейсе TweetListener, то есть aListener.doTweetReceivedAction("Here's my tweet")
. (Оборонительная копия, потому что одно возможное действие для слушателя - это отменить регистрацию/остановку после ваших твитов, и вы не захотите изменять параллельный список). Очевидно, вам нужно будет проявлять большую осторожность в отношении того, как действия в действиях влияют на вашу программу как с точки зрения параллелизма/многопоточности, так и с точки зрения порядка операций.
Что касается самообучения всего, в вашем методе public void static main
вы в основном создаете экземпляр различных объектов и соединяете их как слушатели и т. Д.
Tweeter me = new Tweeter()
SomeDude dude = new SomeDude() // implements TweetListener interface
SomeDude bob = new SomeDude()
me.addListener(dude);
me.addListener(bob);
me.tweet("hi!");
Очевидно, вы также должны KeyTyped слушателя, который будет сидеть & ожидание событий нажатия кнопок, определить, какие они есть, и разослать соответствующие уведомления о событиях в различных слушателей в вашей программе. В какой-то момент, чтобы прослушиватель нажатия клавиш должен был сидеть & блок, ожидая ввода. В качестве альтернативы вы можете использовать этот прослушиватель клавиатуры &, другие части вашей программы запускаются в разных потоках. Это на самом деле способ работы потоковой модели Swing на Java. У вас есть основная нить программы и качающаяся нить, и вы отправляете уведомления о событиях взад и вперед между ними (например, SwingUtilities.invokeLater();)
Это более старая статья, но на самом деле очень хорошо подходит для того, программирование, управляемое событиями в java. Я думаю, что это будет применимо к тому, что вы пытаетесь сделать. https://community.oracle.com/docs/DOC-982960 В нем говорится о таких вещах, как оборонительное копирование, отправка объектов непреложного события и почему вам нужно делать & беспокоиться о таких вещах.
Спасибо! Извините за поздний ответ, но это помогает. Я предполагаю, что это другое мышление, поэтому я исправил его сейчас и разработал общую программу. –