public interface Observer {
// 监听
public void update(String msg);
}
public class ObserverImpl implements Observer {
@Override
public void update(String msg) {
System.out.println("观察者发现消息:"+msg);
}
}
public interface Subject {
/**
*增加观察者
*/
public void add(Observer observerVo);
/**
*删除观察者
*/
public void delete(Observer observerVo);
/**
*发送观察者消息
*/
public void notifyObservers(String msg);
}
public class SubjectImpl implements Subject {
private List<Observer> observerVoList = new ArrayList<>();
/**
* 增加观察者
*
* @param observerVo
*/
@Override
public void add(Observer observerVo) {
observerVoList.add(observerVo);
}
/**
* 删除观察者
*
* @param observerVo
*/
@Override
public void delete(Observer observerVo) {
observerVoList.remove(observerVo);
}
/**
* 发送观察者消息
*
* @param msg
*/
@Override
public void notifyObservers(String msg) {
if (observerVoList != null && observerVoList.size()>0){
for (Observer observerVo: observerVoList){
observerVo.update(msg);
}
}
}
}
public class ObserverTest {
@Test
public void test(){
Subject subject = new SubjectImpl();
subject.add(new ObserverImpl());
subject.add(new ObserverImpl());
subject.add(new ObserverImpl());
subject.notifyObservers("更新");
}
}
这算是实现了观察者模式吗?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答
相关推荐 更多相似问题
点击登录
提问题
悬赏问题
- ¥15 在python中如何把字典转换为csv
- ¥15 matlab数据信号处理问题
- ¥15 为什么Js中函数还可以有实例对象?
- ¥15 一块长方形的大布料截取若干个小的长方形布料,小长方形布料不能旋转,怎么使组成的不规则图形的长度最小?
- ¥15 iPhone13视频通话屏幕闪黑
- ¥15 linux平台中qt5对触屏操作偶尔不响应
- ¥15 不使用zk实现双机clickhouse、kafka数据同步
- ¥15 使用Labwindows/CVI程控万用表时自动切换量程
- ¥15 Matlab修改xml参数后允许不了exe文件
- ¥15 用flask框架接收前端上传的文本文件后怎么读取该文件