我尝试使用订阅者发布者模式时遇到了问题。我创建了一个接口Publisher
,因此我可以区分非Publisher类和Publisher类。 Subscriber
应该只能订阅Publisher
。
但是,如何从Publisher
课程中获取所需的数据?具体来说,我有这个类Camera
,我知道它必须从Entity
对象获取数据。 Entity
实施Publisher
。尽管如此,编译器并不希望我以我喜欢的方式获取数据。我该如何规避这个问题?不幸的是,我不能从我的Publisher
接口中创建一个抽象类,因为我想在其他类的extends
中使用它。
public class Camera implements Subscribers{
@Override
/*compiler error shown: "method does not override or implement
*a method from a supertype"
*/
public void publisherUpdated(Entity e)
{
//code that uses the Entity object
}
}
public class Entity extends JLabel implements Publisher{
//[...]
}
import java.util.ArrayList;
public interface Publisher {
final ArrayList<Subscribers> subs = new ArrayList<Subscribers>();
public void updateSubscribers(Publisher p);
}
答案 0 :(得分:0)
您可以在getSubscribers()
界面中创建一个名为Publisher
的方法,让接口的实现管理订阅者:
public interface Publisher {
public List<Subscriber> getSubscribers();
// ...
}
public class PublisherImplementation implements Publisher {
private final List<Subscriber> subscribers = new ArrayList<Subscriber>();
public List<Subscriber> getSubscribers() {
return subscribers;
}
// ...
}