3 回答

TA貢獻(xiàn)1817條經(jīng)驗 獲得超14個贊
使用觀察者模式。它是這樣的:
interface MyListener{
void somethingHappened();
}
public class MyForm implements MyListener{
MyClass myClass;
public MyForm(){
this.myClass = new MyClass();
myClass.addListener(this);
}
public void somethingHappened(){
System.out.println("Called me!");
}
}
public class MyClass{
private List<MyListener> listeners = new ArrayList<MyListener>();
public void addListener(MyListener listener) {
listeners.add(listener);
}
void notifySomethingHappened(){
for(MyListener listener : listeners){
listener.somethingHappened();
}
}
}
您創(chuàng)建一個接口,該接口具有在發(fā)生某個事件時要調(diào)用的一個或多個方法。然后,事件發(fā)生時需要通知的任何類都將實現(xiàn)此接口。
由于生產(chǎn)者僅知道偵聽器接口,而不是偵聽器接口的特定實現(xiàn),因此這提供了更大的靈活性。
在我的示例中:
MyClass 是生產(chǎn)者,因為它通知了聽眾列表。
MyListener 是接口。
MyForm我對什么時候感興趣somethingHappened,所以它正在實施MyListener和注冊MyClass。現(xiàn)在,無需直接引用MyClass即可通知MyForm事件MyForm。這是觀察者模式的優(yōu)勢,它減少了依賴性并提高了可重用性。

TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊
我不知道這是否是您要尋找的,但是您可以通過將回調(diào)傳遞給子類來實現(xiàn)。
首先定義一個通用回調(diào):
public interface ITypedCallback<T> {
void execute(T type);
}
在ServerConnections實例上創(chuàng)建一個新的ITypedCallback實例:
public Server(int _address) {
serverConnectionHandler = new ServerConnections(new ITypedCallback<Socket>() {
@Override
public void execute(Socket socket) {
// do something with your socket here
}
});
}
在回調(diào)對象上調(diào)用execute方法。
public class ServerConnections implements Runnable {
private ITypedCallback<Socket> callback;
public ServerConnections(ITypedCallback<Socket> _callback) {
callback = _callback;
}
@Override
public void run() {
try {
mainSocket = new ServerSocket(serverPort);
while (true) {
callback.execute(mainSocket.accept());
}
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
順便說一句:我沒有檢查它是否100%正確,請直接在此處進(jìn)行編碼。
添加回答
舉報