设计模式学习02观察者模式

定义

The Observer pattern defines a one-to-many dependency between objects so that when one changes state, all of its dependents are notified and updated automatically.

观察者模式定义了对象之间的一对多的依赖关系,这样当一个对象的状态发生改变时,依赖它的那些对象将会被通知到,会自动更新自己的状态.

说明

观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。做软件开发的经常会订阅邮件列表,这其实也是一种观察者(Observer)模式。JavaAPI提供了对这一模式的原生支持,为我们提供了Observer接口和Observable类来实现所谓观察者模式。

图示


使用Java内置的模式

主题类

 1import java.util.Observable;
 2
 3/**
 4 * 观察者模式学习 (主题类)
 5 * 
 6 * @author sunwei
 7 * 
 8 */

 9public class MyObservable extends Observable
10{
11    public void setName(String name)
12    {
13        setChanged();
14        notifyObservers();
15    }

16}

17

观察者类1

 1 package com.ztgame.pattern;
 2 
 3 import java.util.Observable;
 4 import java.util.Observer;
 5 /**
 6  * 观察者1
 7  * 
 8  * @author sunwei
 9  * 
10  */
11 public class Observer1 implements Observer
12 {
13     @Override
14     public void update(Observable o, Object arg)
15     {
16         System.out.println("我是观察者1,我收到了我订阅的主题!");
17     }
18 }

观察者类2

 1 package com.ztgame.pattern;
 2 
 3 import java.util.Observable;
 4 import java.util.Observer;
 5 /**
 6  * 观察者2
 7  * 
 8  * @author sunwei
 9  * 
10  */
11 public class Observer2 implements Observer
12 {
13     @Override
14     public void update(Observable o, Object arg)
15     {
16         System.out.println("我是观察者2,我也收到了主题信息!");
17     }
18 }

组织协调类

 1 public class LearnOb
 2 {
 3     public static void main(String[] args)
 4     {
 5         // 主题,被观察者
 6         MyObservable observable = new MyObservable();
 7         observable.addObserver(new Observer1());
 8         observable.addObserver(new Observer2());
 9         observable.setName("changed");
10     }
11 }


原文地址:https://www.cnblogs.com/51cto/p/1414699.html