Создание пользовательского события в Java
Я хочу сделать что-то подобное в Java, но я не знаю как:
когда событие "объект 1 говорит "Привет "" происходит, затем объект 2 отвечает на это событие, говоря "Привет".
может кто-нибудь дать мне подсказку или пример кода?
3 ответов
вы, вероятно, хотите посмотреть в шаблон Observer.
вот пример кода, чтобы начать работу:
import java.util.*;
// An interface to be implemented by everyone interested in "Hello" events
interface HelloListener {
    void someoneSaidHello();
}
// Someone who says "Hello"
class Initiater {
    private List<HelloListener> listeners = new ArrayList<HelloListener>();
    public void addListener(HelloListener toAdd) {
        listeners.add(toAdd);
    }
    public void sayHello() {
        System.out.println("Hello!!");
        // Notify everybody that may be interested.
        for (HelloListener hl : listeners)
            hl.someoneSaidHello();
    }
}
// Someone interested in "Hello" events
class Responder implements HelloListener {
    @Override
    public void someoneSaidHello() {
        System.out.println("Hello there...");
    }
}
class Test {
    public static void main(String[] args) {
        Initiater initiater = new Initiater();
        Responder responder = new Responder();
        initiater.addListener(responder);
        initiater.sayHello();  // Prints "Hello!!!" and "Hello there..."
    }
}
то, что вы хотите, является реализацией шаблон Observer. Вы можете сделать это самостоятельно или использовать классы java, такие как java.util.Observer и java.util.Observable
есть 3 разных способа, которыми вы можете настроить это:
- 
ThrowerвнутриCatcher
- 
CatcherвнутриThrower
- 
ThrowerиCatcherвнутри другого класса, в данном примереTest
РАБОЧИЙ ПРИМЕР GITHUB, КОТОРЫЙ Я ЦИТИРУЮ по умолчанию опция 3, чтобы попробовать другие просто раскомментировать "Optional " блок кода класса, который вы хотите быть основным, и установите это класс ${Main-Class} переменная :
4 вещи, необходимые на стороне броска кода:
import java.util.*;//import of java.util.event
//Declaration of the event's interface type, OR import of the interface,
//OR declared somewhere else in the package
interface ThrowListener {
    public void Catch();
}
/*_____________________________________________________________*/class Thrower {
//list of catchers & corresponding function to add/remove them in the list
    List<ThrowListener> listeners = new ArrayList<ThrowListener>();
    public void addThrowListener(ThrowListener toAdd){ listeners.add(toAdd); }
    //Set of functions that Throw Events.
        public void Throw(){ for (ThrowListener hl : listeners) hl.Catch();
            System.out.println("Something thrown");
        }
////Optional: 2 things to send events to a class that is a member of the current class
. . . go to github link to see this code . . .
}
2 вещи, необходимые в файле класса для получения событий из класса
/*_______________________________________________________________*/class Catcher
implements ThrowListener {//implement added to class
//Set of @Override functions that Catch Events
    @Override public void Catch() {
        System.out.println("I caught something!!");
    }
////Optional: 2 things to receive events from a class that is a member of the current class
. . . go to github link to see this code . . .
}
