设计模式之观察者(Observer)模式 代码详解
import java.util.ArrayList;
import java.util.List; /**
* User: HYY
* Date: 13-10-28
* Time: 下午1:34
* To change this template use File | Settings | File Templates.
*/ /**
* 这里使用接口是因为各个观察者可能有各自的独特的方法和属性,因此将其抽象成方法
*/
interface Observer {
void update();
} interface Subject {
void addObserver(Observer observer); void deleteObserver(Observer observer); void notifyObservers();
} class ConcreteObserver implements Observer {
private String ObserverName;
private Subject subject;//一个指向主题的引用, public ConcreteObserver(String ObserverName, Subject subject) {
this.ObserverName = ObserverName;
this.subject = subject;
if (this.subject != null) {
this.subject.addObserver(this);
}
} @Override
public void update() {
//在这个方法中可以通过它,来判断自己关注的数据是否发生变化,并作出相应的行动
System.out.println(ObserverName + " 已经被更新!");
}
} class ConcreteSubject implements Subject {
List<Observer> observerList; public ConcreteSubject() {
this.observerList = new ArrayList<Observer>();
} @Override
public void addObserver(Observer observer) {
if (observer != null) {
if (observerList.contains(observer)) {
System.out.println("已有该观察者,无需添加!");
} else {
observerList.add(observer);
}
}
} @Override
public void deleteObserver(Observer observer) {
observerList.remove(observer);
} @Override
public void notifyObservers() {
for (Observer observer : observerList) {
observer.update();
}
}
} public class MyObserverTest {
public static void main(String[] args) {
//初始化4个观察者和一个被观察对象,构造函数自动将观察的对象附上关系
ConcreteSubject subject = new ConcreteSubject(); ConcreteObserver observer1 = new ConcreteObserver("观察者(1)", subject);
ConcreteObserver observer2 = new ConcreteObserver("观察者(2)", subject);
ConcreteObserver observer3 = new ConcreteObserver("观察者(3)", subject);
ConcreteObserver observer4 = new ConcreteObserver("观察者(4)", subject); subject.notifyObservers();
}
}
设计模式之观察者(Observer)模式 代码详解的更多相关文章
- 设计模式之装饰(Decorator)模式 代码详解
/** * Created with IntelliJ IDEA. * User: HYY * Date: 13-10-27 * Time: 下午10:49 * To change this temp ...
- 设计模式之观察者(OBSERVER)模式
定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. Observer模式描述了如何建立这种关系.这一模式中的关键对象是目标(subject ...
- Head First 设计模式 —— 02. 观察者 (Observer) 模式
思考题 在我们的一个实现中,下列哪种说法正确?(多选) P42 public class WeatherDate { // 实例变量声明 public void measurementsChanged ...
- Atitit.设计模式-----触发器模式 trigger 详解
Atitit.设计模式-----触发器模式 trigger 详解 1. 触发器概念1 1.1. 触发器位置 after|before|instead of1 2. 数据库里面的触发器1 2.1. o ...
- 委托与事件代码详解与(Object sender,EventArgs e)详解
委托与事件代码详解 using System;using System.Collections.Generic;using System.Text; namespace @Delegate //自定义 ...
- BM算法 Boyer-Moore高质量实现代码详解与算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
- Java多线程编程中Future模式的详解
Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...
- Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测
Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测 2017年12月13日 17:39:11 机器之心V 阅读数:5931 近日,Artur Suilin 等人发布了 Kaggl ...
- Java多线程编程中Future模式的详解<转>
Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...
随机推荐
- 别了 oi——一篇高三狗的滚粗遗言
/* 开始于2015年12月 结束于2016年11月 一年的oi生涯有很多值得怀念的事 还记得去年旺哥找我学oi 当时是一脸的蒙逼 要知道 高二才开始搞是很晚了 然而 也就是那一晚之后 许多事情都变了 ...
- document.all的用法详解
all[] 已经被 Document 接口的标准的 getElementByid() 方法和 getElementsByTagName() 方法以及 Document 对象的 getElementsB ...
- Unity3D 之UGUI 面板
UGUI中使用面板,可以对一组控件分为一个组. 一个面板里面可以添加一些控件,就如同Html中的<div>一样.
- Gerrit 删除项目
今天手滑把一个Gerrit上的项目epa写成了epp,想找个重命名的地方也找不到...到网络上搜索了下,发现都是改数据库的,然后就进入的数据库: $ ssh -p 29418 10.27.149.22 ...
- php安全模式
http://www.cnblogs.com/samson/archive/2011/08/08/2130550.html php安全模式:safe_mode=on|off启用safe_mode指令将 ...
- 关于使用cocoaPods,import导入时第三方库头文件没有提示问题的解决办法
估计有很多朋友在使用Xcode在项目中导入第三方库时,使用的是cocoaPods,但是在项目中使用此第三方库导入头文件时,输入#import后,并不会联想第三方库头文件(XXXX.h),需要我们手动输 ...
- 关于arcgis 9.3破解问题详解
对于初学GIS的同学,安装软件可能会遇到各种各样的问题,对于photoshop,autocad,sketchup,3dmax等软件我们的我们无非是输入特定序列号或者用工具随机生成特定序列号就可以破解, ...
- 国庆第六日(2014年10月6日11:51:15),node-webkit,理财产品
(1)node-webkit:一篇很好的入门文章.入门.系列. 在window下的打包和运行.大漠的一篇讲解文章 . (2)lighttable: 官网. (3)现在的理财产品,雨后春笋般冒出:宝点网 ...
- PAT_1002 写出这个数
宝宝不开心了.自从回家开始百练就上不去POJ也上不去,今天突然HDU也上不去了,PAT25分的题目都快更新完了.我就按顺序往下面更新了.回学校之后题目质量能高出不少= =. 问题描述: 读入一个自然数 ...
- skip跳跃表的实现
skiplist介绍 跳表(skip List)是一种随机化的数据结构,基于并联的链表,实现简单,插入.删除.查找的复杂度均为O(logN).跳表的具体定义, 跳表是由William Pugh发明的, ...