博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA设计模式之观察者模式
阅读量:4970 次
发布时间:2019-06-12

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

观察者模式:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变的时候,所有依赖于它的对象都得到通知并被自动更新。

简单例子:比如有两个人张三和李四订阅了气象台的天气推送消息。

 

1 public class Subject   2 {  3     private List
observers = new ArrayList
(); 4 5 public void attach(Observer observer) 6 { 7 observers.add(observer); 8 observer.update(this); 9 } 10 11 public void detach(Observer observer) 12 { 13 observers.remove(observer); 14 } 15 16 protected void notifyObservers() 17 { 18 for(Observer observer: observers) 19 { 20 observer.update(this); 21 } 22 } 23 } 24 25 public interface Observer 26 { 27 public void update(Subject subject); 28 } 29 30 public class ConcreteSubject extends Subject 31 { 32 private String subjectState; 33 34 public String getSubjectState() 35 { 36 return subjectState; 37 } 38 39 public void setSubjectState(String subjectState) 40 { 41 this.subjectState = subjectState; 42 this.notifyObservers(); 43 } 44 } 45 46 import static java.lang.System.out; 47 public class ConcreteObserver implements Observer 48 { 49 private String observerState; 50 51 public void update(Subject subject) 52 { 53 observerState = ((ConcreteSubject)subject).getSubjectState(); 54 } 55 56 public void info() 57 { 58 out.println("我是:" + observerName); 59 out.println("信息:" + observerState); 60 out.println(); 61 } 62 63 private String observerName; 64 65 public void setObserverName(String observerName) 66 { 67 this.observerName = observerName; 68 } 69 } 70 71 public class Client 72 { 73 public static void main(String[] args) 74 { 75 ConcreteSubject weatherSubject = new ConcreteSubject(); 76 weatherSubject.setSubjectState("天气晴朗,25°"); 77 78 ConcreteObserver zhangsan = new ConcreteObserver(); 79 zhangsan.setObserverName("张三"); 80 81 ConcreteObserver lisi = new ConcreteObserver(); 82 lisi.setObserverName("李四"); 83 84 weatherSubject.attach(zhangsan); 85 weatherSubject.attach(lisi); 86 87 zhangsan.info(); 88 lisi.info(); 89 90 weatherSubject.detach(zhangsan); 91 weatherSubject.setSubjectState("多云,20°"); 92 93 zhangsan.info(); 94 lisi.info(); 95 } 96 } 97 98 我是:张三 99 信息:天气晴朗,25°100 101 我是:李四102 信息:天气晴朗,25°103 104 我是:张三105 信息:天气晴朗,25°106 107 我是:李四108 信息:多云,20°

 

转载于:https://www.cnblogs.com/huoxiayu/p/5796726.html

你可能感兴趣的文章
朝歌行
查看>>
xaml控件
查看>>
SQL SERVER启动步骤
查看>>
spring学习笔记一 入门及配置
查看>>
PHP安装问题
查看>>
三十而立,从零开始学ios开发(一):准备起航
查看>>
2019.04.09 电商21 修改购物车商品数量
查看>>
232. Implement Queue using Stacks,225. Implement Stack using Queues
查看>>
Android实战——第三方服务之Bmob后端云的答题系统小项目(四)
查看>>
读书有感----做一个踏实的程序员
查看>>
模块和包
查看>>
Spring+SpringMvc+Mybatis 框架的搭建(二)
查看>>
Pre-defined Keyboard Shortcuts (zz.IS2120@BG57IV3.T717662197)
查看>>
路由器与交换机的区别与联系
查看>>
hdu 1787 GCD Again
查看>>
Linux内核升级
查看>>
西交利物浦大学Java PAPER CODE: CSE105/12-13/S1/Resit Coursework
查看>>
简单的排序算法入门学习
查看>>
linux curl命令
查看>>
每日scrum(五)
查看>>