文章分类:Java编程 关键字: 观察者模式 observer pattern
观察者模式在软件编程中用的较多,我不善于表达我就用在网上看到的故事,和生活的例子说下基本思想
观察者模式还可以用生活中一个例子来表达,就是从邮局订杂志。假如有一个叫 妮妮 的女孩在A邮局订了《时尚女孩》的杂志,又在B邮局订了《知音》杂志,并且告诉这两家邮局,如果杂志到了就给我打电话我自己来拿,然后邮局就在系统中注册下这个女孩姓名,电话等信息。妮妮剩下的就是等邮局的电话来取杂志了。如果杂志到了,邮局打电话给妮妮说,您的杂志到了,请到某某邮局来取(这相当于程序中把对象的引用——邮局名,传给观察者),如果只说您的杂志到了,请到邮局来取,妮妮怎么知道去哪个邮局拿杂志呀。
下面的程序模仿上面的情形,一个随机数产生对象和两个观察者,这两个观察者都在随机数产生对象那里注册了,意思说如果你产生了新的数字,就通知我一声。
结构图:
类说明
名称 |
功能说明 |
Observer |
表示观察者的接口,要成为观察者必须实现此接口才行 |
NumberGenerator |
表示产生数值的抽象类 |
RandomNumberGenerator |
产生随机数的类,继承于NumberGenerator |
NumberObserver |
数字观察者,会打印出变化的数字 |
SymbolObserver |
符号观察者,打印N 个符号,打印多少个符号,由接受到的数值确定 |
1.Observer
- package com.pattern.observer;
-
- public interface Observer {
- public abstract void update(NumberGenerator generator);
- }
2.NumberGenerator
- package com.pattern.observer;
-
- import java.util.ArrayList;
- import java.util.Iterator;
-
-
-
-
-
-
-
-
- public abstract class NumberGenerator {
- private ArrayList observers = new ArrayList();
-
- public void addObserver(Observer observer) {
- observers.add(observer);
- }
-
- public void delObserver(Observer observer) {
- observers.remove(observer);
- }
-
- public void notifyObservers() {
- Iterator it = observers.iterator();
- while(it.hasNext()) {
- Observer o =(Observer) it.next();
- o.update(this);
- }
- }
- public abstract int getNumber();
- public abstract void generate();
- }
3.RandomNumberGenerator
- package com.pattern.observer;
-
- import java.util.Random;
-
-
-
-
-
-
-
-
- public class RandomNumberGenerator extends NumberGenerator{
- private Random random = new Random();
- private int number;
-
- public void generate() {
- for(int i=0 ; i < 5; i++) {
- number = random.nextInt(10);
- notifyObservers();
- }
- }
-
- public int getNumber() {
- return number;
- }
-
- }
4.NumberObserver
- package com.pattern.observer;
-
-
- public class NumberObserver implements Observer{
- public void update(NumberGenerator generator) {
- System.out.println("NumberObserver:"+ generator.getNumber());
- try {
- Thread.sleep(1000 * 3);
- }catch(InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- }
5.SymbolObserver
- package com.pattern.observer;
-
-
- public class SymbolObserver implements Observer{
- public void update(NumberGenerator generator) {
- System.out.print("SymbolObserver:");
- int count = generator.getNumber();
-
- for(int i = 0 ; i < count; i ++) {
- System.out.print("*^_^* ");
- }
- System.out.println("");
- try {
- Thread.sleep(1000 * 3);
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- }
- }
6.Main(测试类)
- package com.pattern.observer;
-
- public class Main {
- public static void main(String[] args) {
-
- NumberGenerator generator = new RandomNumberGenerator();
-
- Observer observer1 = new NumberObserver();
- Observer observer2 = new SymbolObserver();
-
- generator.addObserver(observer1);
- generator.addObserver(observer2);
-
- generator.generate();
- }
- }
7.结果输出
http://sunnylocus.iteye.com/upload/picture/pic/
分享到:
相关推荐
我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...
定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
设计模式之观察者模式ObserverPattern
观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计...
观察者模式(Observer Pattern)是一种对象行为型设计模式,它定义了对象之间的一对多依赖关系。 当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统...
主要介绍了Java设计模式之观察者模式(Observer模式)介绍,Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解,需要的朋友可以...
观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4. J2EE 模式 ...
从生活中的例子可以看出,只要对订阅号... 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己的行为。
在设计一组依赖的对象与它们所依赖的对象之间一致(同步)的交流模型时,观察者模式(Observer Pattern)很有用。它可以使依赖对象的状态与它们所依赖的对象的状态保持同步。这组依赖的对象指的是观察者(Observer)...
1、策略模式STRATEGY PATTERN ...16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式
1. 设计模式 1.1 含义 1.2 作用 1.3 设计原则 1.4 分类 2. 简单工厂模式 (SimpleFactoryPattern) 3. 工厂方法模式 (Factory Method) 4. 单例模式 (Singleton) ...17. 观察者模式 (Observer Pattern)
主要介绍了JavaScript编程设计模式之观察者模式(Observer Pattern),简单说明了观察者模式的概念、原理并结合实例形式详细给出了观察者模式的相关实现与使用技巧,需要的朋友可以参考下
工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。...观察者模式(Observer) 状态模式(State) 策略模式(Strategy) 模板方法模式(Template Method) 访问者模式(Visitor)
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 观察者模式demo java
基于观察者模式和单例模式的java聊天室 面向对象设计,抽象,封装,代理,组合和继承 适合理解java面向对象,socket编程,观察者模式和单例模式
观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式...
创建型模式用来处理对象的创建... 观察者模式(Observer Pattern) 状态模式(State Pattern) 策略模式(Strategy Pattern) 模板方法模式(Template Method Pattern) 访问者模式(Visitor Pattern)
pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 ...