博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 观察者模式
阅读量:2345 次
发布时间:2019-05-10

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

采用接口方式

package te4;//通知接口public interface Subject {
public void Add(BaseObserverObj obj);public void Del(BaseObserverObj obj);public void Noti();}import java.util.ArrayList;//通知类public class SubjectObj implements Subject {
private ArrayList
observers = new ArrayList
();@Override//注册到通知类中public void Add(BaseObserverObj obj) { // TODO Auto-generated method stub observers.add(obj);}//删除@Override public void Del(BaseObserverObj obj) { // TODO Auto-generated method stub observers.remove(obj); }@Override//进行通知 public void Noti() { // TODO Auto-generated method stub for (BaseObserverObj obj : observers) { obj.func(); } }}
//观察者类,只需要继承BaseObserverObj重写func方法public class BaseObserverObj {
protected String name;public BaseObserverObj(String name) { // TODO Auto-generated constructor stub this.name = name;}public void func() { System.out.println(name+"哈哈");}}public class ObserverObj1 extends BaseObserverObj {
public ObserverObj1(String name) { // TODO Auto-generated constructor stubsuper(name);}@Override public void func() { // TODO Auto-generated method stub System.out.println(name+"呵呵"); }}
//测试public static void main(String[] args) {        // TODO Auto-generated method stub        BaseObserverObj base1 = new BaseObserverObj("Tom");        ObserverObj1 obse1 = new ObserverObj1("BOB");        SubjectObj subobj = new SubjectObj();        subobj.Add(base1);        subobj.Add(obse1);        subobj.Noti();    }

通过静态方法实现

mport java.util.ArrayList;import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;//通知类public  class Boss {static ArrayList
emploees = new ArrayList
();public static void Add(employee em){ emploees.add(em);}public static void Del(employee em){ emploees.remove(em);}public static void Noti(){ for (employee emp :emploees) { emp.func(); }}}
//观察者类,继承employee实现抽象函数func即可public abstract class employee {
protected String name; public employee(String nameString) { // TODO Auto-generated constructor stub name = nameString; }public abstract void func();}package te3;public class employee1 extends employee{
public employee1(String nameString) { // TODO Auto-generated constructor stubsuper(nameString);}@Overridepublic void func() { // TODO Auto-generated method stub System.out.println(name+"干活了,别打游戏了");}}public class employee2 extends employee {
public employee2(String name) { // TODO Auto-generated constructor stub super(name);}@Overridepublic void func() { // TODO Auto-generated method stubSystem.out.println(name+"工作了,别斗地主了"); }}
//测试Boss.Noti();    employee1 emp1 = new employee1("BOB");    employee2 emp2 = new employee2("John");    Boss.Add(emp1);    Boss.Add(emp2);    Boss.Noti();    Boss.Del(emp1);    Boss.Add(new employee1("Tom"));    employee emp3 = new employee("Merry") {        @Override        public void func() {            // TODO Auto-generated method stub            System.out.println(name +"上班了,别斗地主了");        }    };    Boss.Add(emp3);    Boss.Noti();}

转载地址:http://mlnvb.baihongyu.com/

你可能感兴趣的文章
HTTP/TCP常见面试问题总结
查看>>
IT行业offer分析
查看>>
9个offer/12家公司
查看>>
IT面试2014校招笔试面试全面总结分析回顾(有点早,仅供参考)
查看>>
最受程序员欢迎的公司榜单发布:2015 IT人才招聘趋势分析
查看>>
那些值得看的博客(随笔/感悟)
查看>>
认识java JVM虚拟机选项Xms Xmx PermSize MaxPermSize区别
查看>>
http中post和get请求方法区别
查看>>
深入理解Cookie与Session
查看>>
JVM学习
查看>>
程序员也要学会沟通
查看>>
程序员一年工作经验之谈
查看>>
2016年总结-Java程序员
查看>>
十万行代码的意义
查看>>
中国合伙人正能量语句
查看>>
正确做事与做正确的事
查看>>
校招上机题(收集)
查看>>
大量数据如何排序
查看>>
org.mybatis.spring.MyBatisSystemException(参数找不到问题)
查看>>
JQuery+JQuery ui实现的弹出窗口
查看>>