热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

设计模式:ObserverPattern(观察者模式)

设计模式应用场景一个对象的改变将导致或者需要导致其他一个或多个对象也发生改变实现方式1.创建实体类参数classActionEvent{longwhen;Objectsour

设计模式应用场景

一个对象的改变将导致或者需要导致其他一个或多个对象也发生改变



实现方式


1.创建实体类参数

class ActionEvent {long when;Object source;public ActionEvent(long when, Object source) {this.when = when;this.source = source;}
}

2.创建监听器接口(监听器即为观察者)

interface ActionListener{void actionPerformed(ActionEvent e);
}

3.创建监听器具体实现

class ButtonListenerOne implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("One:::" + e.when +":::"+ e.source.toString());}
}class ButtonListenerTwo implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("Two:::" + e.when +":::"+ e.source.toString());}
}

4.创建被监听者(被观察者)

其中需要添加监听器的方法addListeners和执行方法buttonPressed
在buttonPressed需要将我们自身作为参数传给观察者

class Button{private List<ActionListener> Listeners &#61; new ArrayList<ActionListener>();public void addListeners(ActionListener listener){this.Listeners.add(listener);}public void buttonPressed() {ActionEvent e &#61; new ActionEvent(System.currentTimeMillis(),this);for(int i&#61;0; i<Listeners.size(); i&#43;&#43;) {ActionListener l &#61; Listeners.get(i);l.actionPerformed(e);}}&#64;Overridepublic String toString() {return "Button{" &#43;"Listeners&#61;" &#43; Listeners &#43;&#39;}&#39;;}
}

5.测试

public static void main(String[] args) {Button b &#61; new Button();b.addListeners(new ButtonListenerOne());b.addListeners(new ButtonListenerTwo());b.buttonPressed();}

结果
在这里插入图片描述


推荐阅读
author-avatar
朝朝宝宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有