观察者设计模式
来源:互联网 发布:php留言板代码 编辑:程序博客网 时间:2024/06/11 12:43
观察者设计模式之Java实现
观察者模式(有时又被称为发布-订阅Subscribe>模式、模型-视图View>模式、源-收听者Listener>模式或从属者模式)。
多个观察者对象同时监听某一个主题对象,当这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
EventSourceInterface.java(主题对象接口)/** * 事件源(被监听对象) * */public interface EventSourceInterface {/** * 注册监听器 * @param myListener */public void registerListener(MyListenerInterface myListener);/** * 移除监听器 * @param myListener */public void removeListener(MyListenerInterface myListener);/** * 触发监听器 */public void notifyAllListtener();}
Sentry.java(主题对象实现类)import java.util.ArrayList;import java.util.List;/** * 事件源(事件发生的类) *-------哨兵------ */public class Sentry implements EventSourceInterface{ private String name; private String discription; private List<MyListenerInterface> listeners; public Sentry(String name,String discription) { this.name=name; this.discription=discription; listeners=new ArrayList<>(); } @Override public void registerListener(MyListenerInterface myListener) { listeners.add(myListener); } @Override public void removeListener(MyListenerInterface myListener) { listeners.remove(myListener); } @Override public void notifyAllListtener() { MyEvent event=new MyEvent(this); event.setDescription("老师来了"); for (MyListenerInterface listener : listeners) { listener.update(event); } } @Override public String toString() { return "我是" + name +",我在帮"+listeners + discription; } public String getName() { return name; } public String getDiscription() { return discription; }}
MyListenerInterface .java(观察者接口)/** * 监听接口 */public interface MyListenerInterface { /** * 事件响应 * @param 事件类 */ public abstract void update(MyEvent e);}
Student .java(观察者实现类)public class Student implements MyListenerInterface{ private String name; private String discription; public Student(String name,String discription){ this.name=name; this.discription=discription; } @Override public String toString() { return "正在"+discription+"的"+name; } @Override public void update(MyEvent e) { Sentry eventSource=(Sentry) e.getEventSource(); System.out.println("我是"+name+ ",我正在"+discription+","+eventSource.getDiscription()+"的"+eventSource.getName() +"说"+e.getDescription()); }}
MyEvent .java/** * 事件类:封装了事件的信息 * */public class MyEvent {private EventSourceInterface eventSource;private String description;public MyEvent(EventSourceInterface eventSource){this.eventSource=eventSource;}public EventSourceInterface getEventSource(){return eventSource;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}}
public class Client { public static void main(String[] args) { Sentry s=new Sentry("小明", "放哨"); Student s1=new Student("小刚", "抄作业"); Student s2=new Student("小强", "吃零食"); s.registerListener(s1); s.registerListener(s2); System.out.println(s); System.out.println("-------------------"); //假设老师来了 s.notifyAllListtener(); }}----------
执行结果:
0 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- c++错题
- 原生js 简单拖拽
- Connection #Facebook Relay文档翻译#
- 三种三栏网页宽度自适应布局方法
- gradle笔记
- 观察者设计模式
- 数组的增删改查的C语言实现
- 搭建Spark分布式集群
- 单点登录实现思路
- JPush极光推送
- String,StringBuffer与StringBuilder的区别??
- LINUX JDK Tomcat 安装
- java web 分页查询、显示
- 多线程的优先级与休眠