Я новичок в Java, и пока читаю документацию, я не могу найти хороших способов для программирования со слабой связью между объектами. Для большинства языков, которые я знаю (C ++, C #, Python, JavaScript), я могу управлять объектами как имеющими «сигналы» (уведомление о чем-то происходит / что-то необходимо) и «слоты» (метод, который может быть связан с сигналом и обработать уведомление / do некоторые работы). На всех упомянутых языках я могу написать что-то вроде этого:
Object1 = new Object1Class();
Object2 = new Object2Class();
Connect( Object1.ItemAdded, Object2.OnItemAdded );
Теперь, если object1
вызывает / излучает ItemAdded
, будет вызван метод OnItemAdded
для Object2
. Такая техника слабой связи часто упоминается как «делегаты», «сигнальный интервал» или «инверсия управления».
По сравнению с шаблоном интерфейса, упомянутая методика не требует группировки сигналов в некоторых интерфейсах. Методы любого объекта могут быть связаны с любым делегатом, если совпадают подписи (C ++ Qt даже расширяет это, разрешая только частичное совпадение подписи). Поэтому мне не нужно писать дополнительный интерфейсный код для каждого метода / группы методов, предоставлять реализацию по умолчанию для неиспользуемых методов интерфейса и т. Д.
И я не вижу ничего подобного в Java :(. Может, я смотрю не так?