昕er 2022-04-15 21:20 采纳率: 50%
浏览 15

这算是实现了观察者模式吗?

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("更新");
    }
}

  • 写回答

2条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 创建了问题 4月15日

      悬赏问题

      • ¥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框架接收前端上传的文本文件后怎么读取该文件