https://github.com/njniecong/JavaDemo/tree/master/java/demo/desgin_pattern/listener/demo1
1 package demo.desgin_pattern.listener.demo1;
2
3 /**
4 * @author niecong
5 * @创建时间 2019/8/10
6 * 事件源持有 一个监听器 并且实现了事件的接口
7 **/
8 public class EventSource implements IEvent {
9 boolean button;
10 boolean mouse;
11 private IEventListener mEventListener;
12
13 //注册监听器
14 @Override
15 public void setEventListener(IEventListener arg) {
16 mEventListener = arg;
17 }
18
19 //触发事件
20 public void mouseEventHappened() {
21 mouse = true;
22 mEventListener.doEvent(this);
23 }
24
25 @Override
26 public boolean ClickButton() {
27 return button;
28 }
29
30 @Override
31 public boolean MoveMouse() {
32 // TODO Auto-generated method stub
33 return mouse;
34 }
35
36 }
1 package demo.desgin_pattern.listener.demo1;
2
3 /**
4 * @author niecong
5 * @创建时间 2019/8/10
6 **/
7 public class EventSource2 implements IEvent {
8 boolean button;
9 boolean mouse;
10 private IEventListener ml;
11
12 @Override
13 public void setEventListener(IEventListener arg) {
14 ml = arg;
15 }
16
17 @Override
18 public boolean ClickButton() {
19 // TODO Auto-generated method stub
20 return button;
21 }
22
23 @Override
24 public boolean MoveMouse() {
25 // TODO Auto-generated method stub
26 return mouse;
27 }
28
29 // 触发事件
30 public void buttonEventHappened() {
31 button = true;
32 ml.doEvent(this);
33 }
34
35 }
1 package demo.desgin_pattern.listener.demo1;
2
3 /**
4 * @author niecong
5 * @创建时间 2019/8/10
6 **/
7 public interface IEvent {
8 void setEventListener(IEventListener arg);
9
10 boolean ClickButton();
11
12 boolean MoveMouse();
13
14 }
1 package demo.desgin_pattern.listener.demo1;
2
3 /**
4 * @author niecong
5 * @创建时间 2019/8/10
6 * 事件监听器的 方法是 事件处理器
7 **/
8 public interface IEventListener {
9
10 void doEvent(IEvent arg);
11
12 }
1 package demo.desgin_pattern.listener.demo1;
2
3 /**
4 * @author niecong
5 * @创建时间 2019/8/10
6 **/
7 public class Test {
8
9 public static void main(String[] args) {
10 // 事件源(被监听的对象)
11 EventSource m1 = new EventSource();
12 EventSource2 m2 = new EventSource2();
13 // 监听器
14 IEventListener mEventListener = new IEventListener() {
15
16 @Override
17 public void doEvent(IEvent arg) {
18 if (true == arg.ClickButton()) {
19 System.out.println("你点击了按钮");
20 } else if (true == arg.MoveMouse()) {
21 System.out.println("你移动了鼠标");
22 }
23 }
24 };
25
26 // lambda 写法
27 // IEventListener mEventListener2 = (IEvent arg)->{
28 // if (true == arg.ClickButton()) {
29 // System.out.println("你点击了按钮");
30 // } else if (true == arg.MoveMouse()) {
31 // System.out.println("你移动了鼠标");
32 // }
33 // };
34
35
36
37 // 注册监听器到事件源
38 m1.setEventListener(mEventListener);
39 m1.mouseEventHappened();
40
41 // 注册监听器到事件源
42 m2.setEventListener(mEventListener);
43 m2.buttonEventHappened();
44 }
45
46 }