设计模式-行为型-观察者模式(Observer)
来源:互联网 发布:java 数据库连接池 编辑:程序博客网 时间:2024/05/29 07:16
定义
定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新
角色
目标角色(Subject):提供添加和删除观察者对象的接口,可以有一个或多个观察者
具体目标角色:具体目标角色的状态发生变化时,通知它的观察者
观察者角色(Observer):为具体观察者提供一个统一接口
具体观察者角色:在目标发生改变时获得通知,并做出相应处理
优点
- 观察者和目标的关联关系不紧密,耦合度低,容易扩展
- 目标变化时,可向所有观察者发出通知,可用于广播通讯
缺点
- 如果观察者较多,通知观察者花费的时间较长
- 观察者模式用的是触发链的结构,比较容易出现循环引用的错误
应用场景
- AWT中的事件处理机制
类图
package com.vapy.behavior.Observe;import java.util.Vector;/** * * @author vapy * */public abstract class Subject { private Vector<Observer> obs = new Vector<Observer>(); public void addObserver(Observer observer) { this.obs.add(observer); } public void delObserver(Observer observer) { this.obs.remove(observer); } protected void notifyObservers() { for(Observer o : obs) { o.update(); } } public abstract void click();}
package com.vapy.behavior.Observe;/** * * @author vapy * */public class Mouse extends Subject { @Override public void click() { System.out.println("i am a mouse, click"); this.notifyObservers(); }}
package com.vapy.behavior.Observe;/** * * @author vapy * */public interface Observer { public void update();}
package com.vapy.behavior.Observe;/** * * @author vapy * */public class MouseListener1 implements Observer { @Override public void update() { System.out.println("i am a mouse listener 1, i receive the mouse click"); }}
package com.vapy.behavior.Observe;/** * * @author vapy * */public class MouseListener2 implements Observer { @Override public void update() { System.out.println("i am a mouse listener 2, i receive the mouse click"); }}
package com.vapy.behavior.Observe;/** * * @author vapy * * 观察者模式 * */public class Client { public static void main(String[] args) { Subject sub = new Mouse(); sub.addObserver(new MouseListener1()); sub.addObserver(new MouseListener2()); sub.click(); }}
本文代码可在github查看:点击此处
6 0
- [设计模式-行为型]观察者模式(Observer)
- 设计模式(4)-行为型-观察者模式(Observer)
- 观察者模式observer(行为型设计模式)
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 设计模式-- 观察者模式Observer(对象行为型)
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 设计模式-行为型-观察者模式(Observer)
- C++设计模式 -> 行为型 -> 观察者模式(Observer Pattern)
- 行为型模式-----观察者模式(Observer)
- 设计模式—行为型-Observer(观察者)
- Observer观察者设计模式(对象行为型)
- 设计模式深入学习--Observer 观察者模式(行为型模式)
- 设计模式深入学习--Observer 观察者模式(行为型模式)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- [DP]Composite设计模式
- Docker学习
- Ural 2041 Nanomatryoshkas(贪心)
- Python Requests throwing up SSLError
- 树形DPpoj2152
- 设计模式-行为型-观察者模式(Observer)
- 并查集
- 移动前端知识总结
- Linux 下安装erlang
- WCF大数据量处理
- 对Volatile变量的理解和总结
- windows 下 sublime Text3 做 Python 编辑器
- logback配置
- Java基础:Java基本数据类型