博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用接口实现自定义监听事件以及观察者模式
阅读量:4584 次
发布时间:2019-06-09

本文共 2990 字,大约阅读时间需要 9 分钟。

前段时间刚做过,事件一长就容易忘,赶紧记下来先

1 package com.xujingyang.JT; 2  3 public class Jt { 4     interface Listenner{ 5         public void run(); 6     } 7      8      9      class test{10          Listenner listenner=null;11         public void setOnRunListenner(Listenner ls){12             listenner=ls;13         }14         15         public void changeEvent(){16             if(listenner!=null){17                 listenner.run();18             }19         }20     }21     22     23     public static void main(String[] args) {24         test t=new Jt().new test();25         t.setOnRunListenner(new Listenner() {26             27             @Override28             public void run() {29                 System.out.println("我是run");30             }31         });32         33         t.changeEvent();34     }35 }
View Code

 

代码稍微修改,便是标准的观察者模式

 

观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。先来看看关系图:

1 package com.xujingyang.JT; 2  3 import java.util.Iterator; 4 import java.util.LinkedList; 5 import java.util.List; 6  7 public class Jt { 8     interface Listenner { 9         public void run();10     }11 12     class Listenner1 implements Listenner {13 14         @Override15         public void run() {16             System.out.println("run1");17         }18 19     }20 21     class Listenner2 implements Listenner {22 23         @Override24         public void run() {25             System.out.println("run2");26         }27 28     }29 30     interface subject {31         /* 增加观察者 */32         public void add(Listenner observer);33 34         /* 删除观察者 */35         public void del(Listenner observer);36 37         /* 通知所有的观察者 */38         public void notifyObservers();39 40         /* 自身的操作 */41         public void operation();42     }43     44     abstract class AbstractSubject implements subject{45 46         List< Listenner> list=new LinkedList
();47 @Override48 public void add(Listenner observer) {49 list.add(observer);50 }51 52 @Override53 public void del(Listenner observer) {54 list.remove(observer);55 }56 57 @Override58 public void notifyObservers() {59 Iterator
iterator = list.iterator();60 while (iterator.hasNext()) {61 iterator.next().run();62 }63 }64 65 }66 67 68 class mySubject extends AbstractSubject{69 70 @Override71 public void operation() {72 System.out.println("开始啦...");73 notifyObservers();74 }75 76 }77 78 79 80 public static void main(String[] args) {81 subject s=new Jt().new mySubject();82 s.add(new Jt().new Listenner1());83 s.add(new Jt().new Listenner2());84 s.operation();85 }86 }
View Code

 

结果:

 

转载于:https://www.cnblogs.com/xujingyang/p/6512113.html

你可能感兴趣的文章
datagrid中设置编辑,删除列是否可以访问
查看>>
Linux下I/O复用 Select与Poll
查看>>
python全栈学习--day10(函数进阶)
查看>>
Android初学第19天
查看>>
Flask框架web开发
查看>>
LRU算法
查看>>
MongoDB 系列(一) C# 类似EF语法简单封装
查看>>
ios github网址
查看>>
Django 数据库操作之数据库连接
查看>>
写log
查看>>
Python基础 ----- 流程控制
查看>>
选择语言之switch case
查看>>
实现斐波那契神兔
查看>>
Understanding Paxos Algorithm
查看>>
springboot+Zookeeper+Dubbo入门
查看>>
【linux就该这么学】-08
查看>>
JavaScript基础知识汇总
查看>>
PyQt4网格布局
查看>>
PHP学习笔记 - 进阶篇(3)
查看>>
极角排序那些事
查看>>