设计模式-观察者模式(Observer)
为什么80%的码农都做不了架构师?>>>
<p>Observer.java</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:613cf5c0-e32f-4bc0-9128-4562a774f1f0" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 400px; height: 116px;" style=" width: 400px; height: 116px;overflow: auto;">package cn.foxeye.design.observer;
public interface Observer {
void update(String state);
} </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>Subject.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:85481259-b3a5-4731-9e08-0edbd5847752" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 602px; height: 418px;" style=" width: 602px; height: 418px;overflow: auto;">package cn.foxeye.design.observer;
import java.util.ArrayList; import java.util.List;
public abstract class Subject {
private List<Observer> observers = new ArrayList<Observer>();public void attach(Observer observer) {this.observers.add(observer);System.out.println("Attached an Observer. ");
}public void dettach(Observer observer) {this.observers.remove(observer);System.out.println("Remove an Observer.");
}public void notifyObservers(String state) {for (Observer observer : observers) {observer.update(state);}
}
} </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>ConcreteObserver.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:20b56b5f-32bd-4aa2-a61c-cc433a457380" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 605px; height: 540px;" style=" width: 605px; height: 540px;overflow: auto;">package cn.foxeye.design.observer;
public class ConcreteObserver implements Observer {
private String name;
private String state;public ConcreteObserver(String name) {this.name = name;
}public void update(String state) {setState(state);System.out.println(name + "状态修改为:" + state);
}public String getState() {return state;
}public void setState(String state) {this.state = state;
}public String getName() {return name;
}public void setName(String name) {this.name = name;
}
} </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>ConcreteSubject.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:d7aa01ec-f20a-4b25-ae4b-0563db4042ea" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 605px; height: 264px;" style=" width: 605px; height: 264px;overflow: auto;">package cn.foxeye.design.observer;
public class ConcreteSubject extends Subject {
private String state;public String getState() {return state;
}public void changeState(String state) {this.state = state;System.out.println("主题状态变为:" + state);this.notifyObservers(state);
}
} </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>ObserverDesignDemo.java</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:c2553ba7-f9fb-4b0f-bc8a-6bc25875ff04" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 628px; height: 309px;" style=" width: 628px; height: 309px;overflow: auto;">package cn.foxeye.design.observer;
public class ObserverDesignDemo {
public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();for (int i = 0; i < 10; i++) {Observer observer = new ConcreteObserver("张三" + i);subject.attach(observer);}subject.changeState("已读");}
} </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
转载于:https://my.oschina.net/foxeye/blog/140331
设计模式-观察者模式(Observer)相关推荐
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- 设计模式-观察者模式(Observer)-Java
设计模式-观察者模式(Observer)-Java 目录 文章目录 1.前言 2.示例案例-多人联机对战游戏的设计 3.观察者模式概述 3.1.观察者模式定义 3.2.观察者模式结构 3.3.观察者模 ...
- 设计模式-观察者模式(Observer Pattern)
设计模式-观察者模式 观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应.在观察者模式中,发生改变的对象称为观 ...
- 设计模式 - 观察者模式(Observer Pattern) Java内置 用法
观察者模式(Observer Pattern) Java内置 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 ...
- Android常见设计模式——观察者模式 (Observer Pattern)
文章目录 1. 前言 2. 观察者模式 2.1 源码 2.2 结构 3. Android中的观察者模式 1. 前言 观察者模式是在代码框架中使用比较高的一个设计模式,常常又叫做订阅/发布模式.而通过这 ...
- 设计模式---观察者模式(Observer)和委托事件模型(DEM)
1 引言 观察者模式,又名发布订阅模式,是一个一对多的关系,当被观察者发生某种变化,对应其观察者做出相应的改变.比如说,某学校研究生实验室有2个学生,2个学生某个上午在实验室,A在玩游戏,B在看电影, ...
- C++设计模式--观察者模式(Observer)
概述 观察者模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 适用场景 以下任一情况下可以使用观察者模式: 当一个抽象模型有两方面,其中一 ...
- 趣谈设计模式 | 观察者模式(Observer) :消息的发布与订阅
文章目录 案例:文章推送 观察者模式 观察者模式的运作流程 观察者模式解决的问题 观察者模式大显身手 总结 要点 应用场景 生产者-消费者模型 VS 观察者模式 完整代码及文档 案例:文章推送 假设我 ...
- Java设计模式—观察者模式(Observer pattern)
故事: 小雪是一个非常漂亮的女孩,漂亮的女孩总是有很多的追求者,而且追求者的队伍在不断的变动,随时有人进入这个队伍,也有人退出.男孩们追求女孩时总是表现出120%的关心,当小雪私自游玩时总是不断收到追 ...
- 设计模式:观察者模式--Observer
一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时 ...
最新文章
- vsftpd用户配置 No.2
- TensorFlow 2.0发布在即,高级API变化抢先看
- 马斯克“口无遮拦”发推特又挨批,被指无视法院命令
- python小实验(1):字符串处理
- 大牛书单 | 数据库专题好书分享
- 《Python编程:从入门到实践》速查表
- C/C++—— int main(int argc,char* argv[])讲解
- php7扩展sphinx,php7进行安装sphinx简单记录
- 按键精灵Q语言-怎么使用自定义函数返回值
- eclipse 基础设置
- 大数据_Hbase-(数据读取流程_hbase读取效率比较慢的原因)---Hbase工作笔记0008
- 7-26 币值转换 (20 分)
- lcmgcd因数分解
- Android-7.0-Nuplayer概述
- EM算法 --入门级详解
- 如何拯救拖延症??11大招总有一招帮你搞定
- 自定义Java注解处理器
- 高性价比降噪耳机推荐,2023年降噪耳机排行榜推荐
- 大数据----2.基础环境搭建
- 码易众包平台致开源中国恶意剽窃的公开信
热门文章
- python获取用户输入的数字_Python 将用户输入的数字 提取整数谢谢
- 基础数学:关于二次无理数
- GraphViz:2 DOT语法和相关应用
- ajax使用json下拉框,ajax请求后台得到json数据后动态生成树形下拉框的方法
- 洲际的merlin怎么用_洲际merlin登陆
- CSS学习16之层级
- python中easygui最新下载教程_python怎么下载easygui
- MFC listctrl显示缩略图时索引问题和滚动条问题
- Spring 实践:AOP
- 一台电脑上同启动两个Tomcat的方式,windows/Linux配置