不一定。Java 中的观察者模式并不强制要求使用接口,是否使用接口取决于你的设计目的和灵活度需求。
下面从几个角度说明:
这是《GoF 设计模式》中的标准做法:
interface Observer {
void update(String msg);
}
class Subject {
private List<Observer> observers = new ArrayList<>();
public void add(Observer o) { observers.add(o); }
public void notifyAll(String msg) {
for (Observer o : observers) o.update(msg);
}
}
优点
如果你只是简单场景,也可以:
class Observer {
public void update(String msg) {
System.out.println(msg);
}
}
class Subject {
private List<Observer> list = new ArrayList<>();
public void add(Observer o) { list.add(o); }
public void notify(String msg) {
for (Observer o : list) o.update(msg);
}
}
问题
Java 本身提供了:
java.util.Observer(已过时)java.util.Observable(已过时)或者更推荐:
class Subject {
private List<Consumer<String>> listeners = new ArrayList<>();
public void subscribe(Consumer<String> c) {
listeners.add(c);
}
public void publish(String msg) {
listeners.forEach(c -> c.accept(msg));
}
}
这里 没有自定义 Observer 接口,而是用 Consumer。
✅ 观察者模式 ≠ 必须用接口
✅ 接口只是“推荐做法”,不是语法强制
✅ 是否用接口取决于:
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。