3 回答
TA贡献1817条经验 获得超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();
}
}
}
您创建一个接口,该接口具有在发生某个事件时要调用的一个或多个方法。然后,事件发生时需要通知的任何类都将实现此接口。
由于生产者仅知道侦听器接口,而不是侦听器接口的特定实现,因此这提供了更大的灵活性。
在我的示例中:
MyClass 是生产者,因为它通知了听众列表。
MyListener 是接口。
MyForm我对什么时候感兴趣somethingHappened,所以它正在实施MyListener和注册MyClass。现在,无需直接引用MyClass即可通知MyForm事件MyForm。这是观察者模式的优势,它减少了依赖性并提高了可重用性。
TA贡献2012条经验 获得超12个赞
我不知道这是否是您要寻找的,但是您可以通过将回调传递给子类来实现。
首先定义一个通用回调:
public interface ITypedCallback<T> {
void execute(T type);
}
在ServerConnections实例上创建一个新的ITypedCallback实例:
public Server(int _address) {
serverConnectionHandler = new ServerConnections(new ITypedCallback<Socket>() {
@Override
public void execute(Socket socket) {
// do something with your socket here
}
});
}
在回调对象上调用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%正确,请直接在此处进行编码。
添加回答
举报