> 文档中心 > 设计模式之观察者模式

设计模式之观察者模式


系列文章目录

第一篇:设计模式之观察者模式


文章目录

  • 系列文章目录
  • 前言
  • 一、示例讲解

前言

主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。


提示:以下是本篇文章正文内容,下面案例可供参考

一、示例讲解

下面通过一个事件生产者和三个观察者来给大家演示
主要是通过改变ProduceEvent类的state状态来触发观察者事件

/** *  事件产生者 */public class ProduceEvent {    private int state; // 状态 0 关闭 1 开启    private List<ActionListener> listenerList = new ArrayList<>();    public int getState() { return state;    }    public void setState(int state) { this.state = state; ActionEvent event = new ActionEvent(this,0,null); listenerList.forEach(x -> x.actionPerformed(event));    }    public void register(ActionListener listener) { listenerList.add(listener);    }}
/** * 观察者1 */public class ObserverEvent1 implements ActionListener {    @Override    public void actionPerformed(ActionEvent e) { ProduceEvent source = (ProduceEvent) e.getSource(); int state = source.getState(); System.out.println("ObserverEvent1 : "+state);    }}
/** * 观察者2 */public class ObserverEvent2 implements ActionListener {    @Override    public void actionPerformed(ActionEvent e) { ProduceEvent source = (ProduceEvent) e.getSource(); int state = source.getState(); System.out.println("ObserverEvent2 : "+state);    }}
/** * 观察者3 */public class ObserverEvent3 implements ActionListener {    @Override    public void actionPerformed(ActionEvent e) { ProduceEvent source = (ProduceEvent) e.getSource(); int state = source.getState(); System.out.println("ObserverEvent3 : "+state);    }}

进行测试

public class Test {    public static void main(String[] args) { /**  * 观察者模式  */ // 事件注册 ProduceEvent event = new ProduceEvent(); event.register(new ObserverEvent1()); event.register(new ObserverEvent2()); event.register(new ObserverEvent3());  event.setState(1);    }}

结果展示
设计模式之观察者模式